我有一个数据框df
列:[value
,arg1
,arg2
,diff_value
]。我想找到所有行(diff_value,arg1,arg2)在df
中(作为前3列)。我的代码是:
contains_df = df.merge(df,
left_on=['value', 'arg1', 'arg2'],
right_on=['diff_value', 'arg1', 'arg2'])\
.drop(columns=['value_y', 'diff_value_y'])\
.rename(columns={'value_x':'value', 'diff_value_x':'diff_value'})
然后我会假设df[df.value == 'a']
'a'
是diff_value
第1行中contains_df
的值将产生至少一行。但是,我没有得到任何行,这意味着我的合并没有达到我的预期。我该如何解决?
例如,用:
df = pd.DataFrame({'value':['a', 'b', 'c', 'd'], 'arg1': [1, 1, 0, 0],
'arg2':[0, 0, 1, 1], 'diff_value':['z', 'a', 'b', 'y']})
我希望结果是第2行:[value:'b', arg1:1, arg2:1, diff_value:'a']
as('a'
,1,0)在第1行中为(value,arg1,arg2)。但是,输出是第1行。
问题是需要交换left_on
和right_on
合并中的第一个值。
contains_df = df.merge(df,
left_on=['diff_valuevalue', 'arg1', 'arg2'],
right_on=['value', 'arg1', 'arg2'])\
.drop(columns=['value_y', 'diff_value_y'])\
.rename(columns={'value_x':'value', 'diff_value_x':'diff_value'})
这产生了期望的结果。