Python 基于列中的值从数据帧中删除行

Python 基于列中的值从数据帧中删除行,python,pandas,dataframe,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

假设我有一个数据帧,其中包含列“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中有匹配的值。为了举例说明,我扩展了数据帧 对不起,如果我的原始行号不匹配。 总结需求

多行将有B列与A列匹配,期望删除任何行中B列与A列匹配的所有行


为了重申A列和B列在同一行中不相等

此解决方案假设当B列中的条件满足时,
A列
中的唯一值也应删除

我添加了第五行来测试同一行中的相等值不应被删除的条件

   Column A  Column B
1        10        62
2        20        75
3        30        45
4        45        55
5        65        65
检查
列B
中的所有值,如果它们位于
列A
中,但不包括值相等的行

df[~(df['Column B'].isin(df['Column A']) & (df['Column B'] != df['Column A']))]
输出:

  • 根据附加详细信息进行更新,输出与预期结果匹配
将熊猫作为pd导入
#样品
df=pd.DataFrame({'colA':[10,10,20,20,30,30,40,40],'colB':[62,72,75,10,35,45,55,20,30])
#显示(df)
可乐瓶
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]:
可乐瓶
0    10    62
1    10    72
2    20    75
4    30    35
5    30    45
6    40    55

拖放是递归的吗?即,如果有一个值为(50,30)的第5行,那么应该处理它的时间是多少?如果在删除第3行后处理,则列A没有值
30
,因此将保留该列。相反,如果同时删除所有行,则第5行将被标记并删除。是。有可能多行会出现这种情况mentioned@BillHuang你是对的。
列A
中的唯一值可能会丢失。我不知道这是否可取。这会使问题变得有趣。您能提供一个包含多行要删除的更大的示例吗?我已经发布了一个答案,但删除了它,因为我有点困惑到底是什么,你在寻找。如果它是递归的,那么解决方案就会变得更加困难,循环也会更有意义。@MLNLPEnhusiast迈克尔的解决方案有什么不正确的地方吗?如果你把他的答案改成
df[~(df['Column B'].isin(df['Column A']]]]
?我想我们昨天都想得有点过头了:)???
   Column A  Column B
1        10        62
2        20        75
4        45        55
5        65        65