Pandas在同一个表中合并多列,产生意外输出

问题描述 投票:-2回答:1

我有一个数据框df列:[valuearg1arg2diff_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行。

python pandas join merge inner-join
1个回答
0
投票

问题是需要交换left_onright_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'})

这产生了期望的结果。

© www.soinside.com 2019 - 2024. All rights reserved.