【问题标题】:Comparing two numbers lists with each other in Python在 Python 中比较两个数字列表
【发布时间】:2017-11-18 20:51:55
【问题描述】:

我有一个数据框(可能是一个列表):

A = ['01', '20', '02', '25', '26']
B = ['10', '13', '14', '64', '32']

我想通过以下方式比较列表“a”和列表“b”:

如您所见,将左列中的数字字符串与右列中的字符串进行比较。组合是具有相同边界数字的字符串,其中一个在合并期间(或之后)被删除。为什么要删除字符串“010”?因为每个数字只能出现一次。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以执行几个字符串切片操作,然后在公共数字上合并。

    a
    
        A
    0  01
    1  20
    2  02
    3  25
    4  26
    
    b
    
        B
    0  10
    1  13
    2  14
    3  64
    4  32
    
    a['x'] = a.A.str[-1]
    b['x'] = b.B.str[0]
    b['B'] = b.B.str[1:]
    
    m = a.merge(b)
    

    您也可以使用assign 在一行中执行此操作,而不会破坏原始数据帧:

    m = a.assign(x=a.A.str[-1]).merge(b.assign(x=b.B.str[0], B=b.B.str[1:]))
    

    对于唯一性,您需要转换为 set 并检查其长度。

    v = (m['A'] + m['B'])
    v.str.len() == v.apply(set).str.len()
    
    0    False
    1     True
    2     True
    3     True
    dtype: bool
    
    v[v.str.len() == v.apply(set).str.len()].tolist()
    ['013', '014', '264']
    

    【讨论】:

    • @cᴏʟᴅsᴘᴇᴇᴅ 有趣的方法,实际上长度研究解决了问题:) 有趣的是上面的同事是否完成了热烈的讨论:) 我不会打扰他们:D
    【解决方案2】:

    您应该注意的是,您实际上传递的是整数,而不是字符串。这意味着A = [01, 20, 02, 25, 26]A = [1, 20, 2, 25, 26] 相同。但是,如果您始终知道您将使用 A = ['01', '20', '02', '25', '26']。因此,您应该做的第一件事是将列表转换为字符串列表。如果你知道所有的整数都是

    A = ['%02d' % i for i in A]
    B = ['%02d' % i for i in B]
    

    (如果您想保留整数列表,也可以将它们命名为不同的名称)。那么这就是解决方案:

    final = []
    for i in A:
        for j in B:
            if i[-1] == j[0]:
                final.append(i + j[1:])
    

    【讨论】:

    • 请先看标签再回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多