我有一只熊猫df:
df = pd.DataFrame({'id':[1,1,2,2,3],
'type':['a','b','c','d','e'],
'value':[100,200,300,400,500]})
print(df)
id value type
1 100 a
1 200 b
2 300 c
2 400 d
3 500 e
我正在合并相同的数据框以获得
的组合df2 = pd.merge(df, df,on=['id'])
print(df2)
id type_x value_x type_y value_y
1 a 100 a 100
1 a 100 b 200
1 b 200 a 100
1 b 200 b 200
2 c 300 c 300
2 c 300 d 400
2 d 400 c 300
2 d 400 d 400
3 e 500 e 500
但我不希望列value_x = value_y
例如:
id type_x value_x type_y value_y
1 a 100 a 100
我可以在合并后选择列
df2 = df2[df2.value_x != df2.value_y]
但我不想这样做,
还有其他方法,我可以在合并时将其删除吗?
我的最终输出(所需):
id type_x value_x type_y value_y
1 a 100 b 200
1 b 200 a 100
2 c 300 d 400
2 d 400 c 300
答案 0 :(得分:3)
你可以在一个声明中完成所有操作,但是,使用query
,它仍然很像你正在做的事。
df2 = pd.merge(df, df,on=['id']).query('value_x != value_y')
输出:
id type_x value_x type_y value_y
1 1 a 100 b 200
2 1 b 200 a 100
5 2 c 300 d 400
6 2 d 400 c 300