如何将不同的值与不同数据帧熊猫的相同ID进行比较

时间:2018-03-30 02:44:57

标签: python-3.x pandas

我有两个不同的DataFrame名为df1和df2,具有相同的id列,但是有些id具有相同的计数,而且有些id具有不同的计数,所以我想获得具有不同计数值的相同id的数据,并且两个DataFrame都有不同的索引

以下是我的df1

    id  valueA
0   255 1141
1   91  1130
2   347 830
3   30  757
4   68  736
5   159 715
6   32  713
7   110 683
8   225 638
9   257 616

我的df2是

    id  valueB
0   255 1231
1   91  1170
2   5247  954
3   347 870
4   30  757
5   68  736
6   159 734
7   32  713
8   110 683
9   225 644
10  257 616
11  917 585
12  211 575
13  25  530

我该怎么做?

1 个答案:

答案 0 :(得分:2)

使用merge并使用query过滤数据框:

df1.merge(df2, on='id').query('valueA != valueB')

输出:

    id  valueA  valueB
0  255    1141    1231
1   91    1130    1170
2  347     830     870
5  159     715     734
8  225     638     644

相同方法的语法不同:

df_out = df1.merge(df2, on='id')
df_out[df_out['valueA'] != df_out['valueB']]

回应下面的意见:

当然你可以使用set_index让pandas处理对齐。

df1 = df1.set_index('id')
df2 = df2.set_index('id')

df_diff = df1['valueA'] - df2['valueB']

df_diff = df_diff[df_diff.notnull() & df_diff.ne(0)]

pd.concat([df1.reindex(df_diff.index), df2.reindex(df_diff.index)], axis=1)

输出:

     valueA  valueB
id                 
91     1130    1170
159     715     734
225     638     644
255    1141    1231
347     830     870