熊猫:如何根据表示两个列中值的元组列表从数据框中删除行?

时间:2018-06-27 13:28:32

标签: python python-3.x pandas dataframe tuples

这与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

1 个答案:

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