假设我有一个具有列'A'和列'B'的数据框,我该如何删除列'A'和'B'相等但不在同一行中的行。我只想删除列“ B”等于列“ A”的行
例如,第4、8和9行中的“ B”列等于第2、3、5行中的“ A”列。我要删除第4、8和9行
Column A Column B
1 10 62
2 10 72
3 20 75
4 20 10
5 30 35
6 30 45
7 40 55
8 40 20
9 40 30
删除第4、8和9行,因为来自行的B列等于来自2,3&5行的A列
预期产量
Column A Column B
1 10 62
2 10 72
3 20 75
5 30 35
6 30 45
7 40 55
第4、8和9行需要删除
添加其他详细信息:在同一行中,列A和列B永远不会相等。B列中的多个行在A列中可能具有匹配的值。为说明起见,我扩展了数据框,如果我的原始行号不匹配,对不起。总结需求。
多个行将具有与列A匹配的列B,并且期望删除其中任何行中列B与列A匹配的所有行。
重申A列和B列在同一行中将不相等
该解决方案假设在column A
满足条件时也应删除in中的唯一值column B
。
我添加了第五行以测试以下条件:同一行中的相等值不应删除
Column A Column B
1 10 62
2 20 75
3 30 45
4 45 55
5 65 65
检查所有值column B
,如果他们是在column A
用isin
,但不包括用相等值的行。
df[~(df['Column B'].isin(df['Column A']) & (df['Column B'] != df['Column A']))]
出:
Column A Column B
1 10 62
2 20 75
4 45 55
5 65 65
import pandas as pd
# sample
df = pd.DataFrame({'colA': [10, 10, 20, 20, 30, 30, 40, 40, 40], 'colB': [62, 72, 75, 10, 35, 45, 55, 20, 30]})
# display(df)
colA colB
0 10 62
1 10 72
2 20 75
3 20 10
4 30 35
5 30 45
6 40 55
7 40 20
8 40 30
df[~(df['colB'].isin(df['colA']) & (df['colB'] != df['colA']))]
[out]:
colA colB
0 10 62
1 10 72
2 20 75
4 30 35
5 30 45
6 40 55
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句