我需要2个数据框,我想使用
isin()方法
检查df1和df2中的内容。
当我只比较一列(index1)时 - 结果还可以 - df1.index1中存在2个df1.index1值。
但是当我比较df1和df2的2列(index1,index2)时,对于所有3行,结果都是false,即使有一个公共行(index1 = 3,index2 = 6)。
为什么?
感谢。
def multiply_by_three(f):
def decorator():
return f() * 3
return decorator
@multiply_by_three
def add(a, b):
return a + b
print(add(1,2)) # returns (1 + 2) * 3 = 9
答案 0 :(得分:0)
这是因为“如果所有标签都匹配,结果只会在某个位置为真。” (docs)。如果要忽略标签,则需要使用基础numpy数组:
df1[['index1','index2']].isin(df2[['index1', 'index2']].values.ravel())
Out:
index1 index2
0 False True
1 True True
2 True True
如果您希望标签与列匹配,可以使用字典:
df1[['index1','index2']].isin(df2[['index1', 'index2']].to_dict('l'))
Out:
index1 index2
0 False False
1 True True
2 True True
如果要检查行是否完全匹配,则需要使用merge:
df1.merge(df2, how='left', on=['index1', 'index2'], indicator=True)
Out:
A_x index1 index2 A_y _merge
0 1 1 4 NaN left_only
1 2 2 5 NaN left_only
2 3 3 6 5.0 both
当index1和index2都匹配时,_merge
列返回both
。