![](/img/trans.png)
[英]Pandas: Remove Rows Where the Value of One Column Appears on Any Row in Another
[英]Remove rows where value in one column equals value in another
我正在努力弄清楚如何从pandas数据框中删除行,其中两个指定的列在一行中具有相同的值。
例如,在下面的示例中,我想删除第2列和第4列中具有重复值的行。
例如:
Column1 Column2 Column3 Column4
Pat 123 John 456
Pat 123 John 345
Jimmy 678 Mary 678
Larry 678 James 983
会变成:
Column1 Column2 Column3 Column4
Pat 123 John 456
Pat 123 John 345
Larry 678 James 983
任何帮助表示赞赏,谢谢!
Series.ne
( !=
) df[df['Column2'] != df['Column4']]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
或者,使用operator.ne
:
df[operator.ne(df['Column2'], df['Column4'])]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
比较两者; 得到一个面具,然后过滤。
使用loc
,我们还可以提供回调(由@WB建议!)。
df.loc[lambda x : x['Column2'] != x['Column4']]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
query
df.query('Column2 != Column4')
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
np.vectorize
import operator
f = pd.np.vectorize(lambda x, y: x != y)
df[f(df['Column2'], df['Column4'])]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
...纯娱乐。
df[[x != y for x, y in zip(df['Column2'], df['Column4'])]]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
比你想象的更快!
另一种方式:
屏蔽匹配值的解决方案..
>>> mask = (df.Column2 == df.Column4)
>>> df[~mask]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
或者只是使用Boolean indexing
......
>>> df[ df.Column2 != df.Column4 ]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
另一个使用DataFrame.drop
方法:
>>> df.drop(df[(df.Column2) == (df.Column4)].index)
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
除上述之外,如果要直接对dataFrame进行更改,请使用inplace inplace=True
:
df.drop(df[(df.Column2) == (df.Column4)].index, inplace=True)
使用pandas.DataFrame.ne包装的另一个不错的解决方案灵活的比较方法ne。
>>> df[df.Column2.ne(df.Column4)]
Column1 Column2 Column3 Column4
0 Pat 123 John 456
1 Pat 123 John 345
3 Larry 678 James 983
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.