[英]Dropping rows from pandas dataframe based on value in column(s)
假設我有一個包含“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 列在同一行中不相等
此解決方案假設在column B
滿足條件時,也應刪除column A
中的唯一值。
我添加了第五行來測試不應刪除同一行中的相等值的條件
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.