根据列中的值从熊猫数据框中删除行

时间:2020-10-04 19:24:30

标签: python pandas dataframe

假设我有一个包含“ 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列在同一行中将不相等

1 个答案:

答案 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