假设我有一个包含“ 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列在同一行中将不相等
答案 0 :(得分:4)
此解决方案假定column A
中满足条件时,也应删除column B
中的唯一值。
我添加了第五行以测试是否应删除同一行中的相等值的条件
Column A Column B
1 10 62
2 20 75
3 30 45
4 45 55
5 65 65
检查column B
中所有值是否与isin
位于column A
中,但排除具有相等值的行。
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