Python 基于列中的值从数据帧中删除行
假设我有一个数据帧,其中包含列“a”和列“B”,如何删除列“a”和“B”相等但不在同一行中的行。我只想删除列“B”等于列“A”的行 例如,第4、8和9行的列“B”等于第2、3和5行的列“A”。 我想删除第4、8和9行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
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