我有两个不同的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
我该怎么做?
答案 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