2017-08-09 145 views
0

我有一个熊猫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

你是从头开始构建数据帧或者这只是一个例子,你必须与现有框架的工作? –

+0

@JonClements这只是一个例子,我有一个类似的数据框有更多的列。 – Shubham

回答

1

你可以做到这一切在一个声明中,但是,它仍然是很像你在干什么,使用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