这与Select rows from a DataFrame based on list values in a column in pandas密切相关,在这里我不仅要查找一列,还希望在两列中查找匹配的元组。
可复制的示例
import pandas as pd
df = pd.DataFrame([[1, 2, 'a'], [1, 3, 'b'], [1, 3, 'c'], [1, 4, 'b'], [1, 2, 'c'], [1, 7, 'c']])
df.columns = ['id1', 'id2', 'name']
print(df)
示例数据框
id1 id2 name
0 1 2 a
1 1 3 b
2 1 3 b
3 1 4 b
4 1 2 c
5 1 7 c
我有一个元组列表!
badTuples = [(1, 2), (1, 3), (1, 5)]
在元组的第一个元素中,(1, 2)
; 1
用于引用'id1'
列中的值,2
用于引用'id2'
列中的值。
我想删除这样的行,它们具有匹配的('id1', 'id2')
元组元素!有时情况是在元组列表中
在数据帧中没有(1, 5)
对!在我的示例中,DataFrame中只有(1, 2), (1, 3) and (1, 4)
对id1, id2
对!
在这种情况下,我希望跳过这对(1, 5)
。
输出DataFrame应该是:
id1 id2 name
3 1 4 b
5 1 7 c
答案 0 :(得分:1)
使用:
df = df[~pd.Series(list(zip(df['id1'], df['id2']))).isin(badTuples)]
或者:
df = df[~df[['id1','id2']].apply(tuple, 1).isin(badTuples)]
print(df)
id1 id2 name
3 1 4 b
5 1 7 c