在Python中相互比较两个数字列表
我有一个数据框(可能是一个列表): 我想用以下方式比较列表“a”和列表“b”:在Python中相互比较两个数字列表,python,pandas,Python,Pandas,我有一个数据框(可能是一个列表): 我想用以下方式比较列表“a”和列表“b”: 如您所见,将比较左列中的数字字符串与右列中的字符串。合并是具有相同边界数字的字符串,其中一个在合并期间(或之后)删除。为什么要删除字符串“010”?因为每个数字只能出现一次。您可以执行两个字符串切片操作,然后在公共数字上合并 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
如您所见,将比较左列中的数字字符串与右列中的字符串。合并是具有相同边界数字的字符串,其中一个在合并期间(或之后)删除。为什么要删除字符串“010”?因为每个数字只能出现一次。您可以执行两个字符串切片操作,然后在公共数字上合并
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:]))
对于Unique,您需要转换为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']
您应该注意的是,您实际上是在传递整数,而不是字符串。这意味着
A=[01,20,02,25,26]
与A=[1,20,2,25,26]
相同。如果你总是知道你将要处理整数@cᴏʟᴅsᴘᴇᴇᴅ 有趣的方法,实际上长度研究解决了问题:)有趣的是上面的同事是否完成了一次生动的讨论:)我不会打扰他们:请在回答问题之前看一下标签。
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']
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:])