用列表(Pandas df)列表屏蔽两列



我有一个列表,其中包含两个元素的列表。

我想将数据帧筛选为列表列表中[column_a, column_b]所在的行。

例:

输入:

l = [ [0,1], [1,2] ]
df = pd.DataFrame({'column_a' : [0, 1, 2], 'column_b' : [1, 3, 0]})
column_a  column_b
0         0         1
1         1         3
2         2         0  

预期产出:

column_a  column_b
0         0         1

从列表中创建一个 df 并合并:

df.merge(pd.DataFrame(l,columns=df.columns))

column_a  column_b
0         0         1

循环的某些时间一点也不差

df[[x in l for x in df.values.tolist()]]
Out[135]: 
column_a  column_b
0         0         1

我的解决方案

l = [[0, 1], [1, 2]]
df = pd.DataFrame({'column_a': [0, 1, 2], 'column_b': [1, 3, 0]})
for elem in l:
df.loc[(df['column_a'] == elem[0]) & (df['column_b'] == elem[1]), 'Result'] = 1
df = df[df['Result'] == 1].drop(['Result'], axis=1)

输出:

column_a  column_b
0         0         1

你可以做:

l = [ [0,1], [1,2] ]
l=[tuple(el) for el in l]
#it has to be in tuple format
df.loc[df[['column_a', 'column_b']].apply(tuple, axis=1).isin(l)]

输出:

column_a  column_b
0         0         1

找到了一种通过添加列来做到这一点的方法。也许不是最简单的方法,但它有效:

df['c'] = [[x, y] for x, y in zip(df['column_a'], df['column_b'])]
df[[x in l for x in df['c']]]

输出:

column_a  column_b       c
0         0         1  [0, 1]

相关内容

  • 没有找到相关文章

最新更新