假设我有以下两个数据帧:
a = pd.DataFrame(columns = ['a','b'], data = [[1,2],[3,4], [5,6],[7,8]])
b = pd.DataFrame(columns = ['a','b'], data = [[1,2],[7,4], [9,6],[11,8]])
我想做的是将a
的每个元素与b
的每个元素进行比较,如果有匹配项,则在计数器中加+1,如果没有匹配项,我想将不匹配的行附加到上面的空数据框中。
到目前为止,这是我的代码:
counter = 0
counts = pd.DataFrame()
for i, j in a.iterrows():
for a, row in b.iterrows():
if a[j] == b[row]:
counter += 1
else:
counts = counts.append(a[row])
当我运行它时,出现此错误:
TypeError: 'int' object is not subscriptable
我该如何解决并解决此错误?
谢谢
答案 0 :(得分:1)
您可以将merge
与indicator
一起使用
s=a.merge(b,indicator=True,how='outer')
s
Out[481]:
a b _merge
0 1 2 both
1 3 4 left_only
2 5 6 left_only
3 7 8 left_only
4 7 4 right_only
5 9 6 right_only
6 11 8 right_only
您的数量
s['_merge'].eq('both').sum()
Out[482]: 1
新df
newdf=s.loc[s['_merge']=='right_only',:].copy().drop('_merge',1)
答案 1 :(得分:1)
另一种方法是使用遮罩(尽可能避免在熊猫中for
循环):
m = (a==b).apply(np.all, axis=1) #assuming you want both elements to be equal
counts = a[~m].copy()
counter = m.sum()