使用isin函数后清空df



你好,我正试图过滤掉另一个dict 中包含的df列

这是样品:

import random
df = pd.DataFrame({'type': random.choice(['222', '44']), #let size be 10k for example
'method': random.choice(['open', 'close'])}) 
filter_dict = {'type': {0: ['44']}, 'method': {0: ['open', 'closed']}}

它工作良好with df[df['method'].isin(filter_dict['method'][0])]

当我尝试像这样筛选下一列时,我得到了一个空的数据帧

df[df['type'].isin(filter_dict['type'][0])]

我知道为什么会发生,你的答案是

pandas版本为0.23.4

您的示例无效(您有一个random.choice的唯一值,因此是pandas错误(,但除此之外,代码仍按预期工作:

import numpy as np
np.random.seed(0)
df = pd.DataFrame({'type': np.random.choice(['222', '44'], size=20),
'method': np.random.choice(['open', 'close'], size=20)})
filter_dict = {'type': {0: ['44']}, 'method': {0: ['open', 'closed']}}
df[df['type'].isin(filter_dict['type'][0])]

输出:

type method
1    44  close
2    44  close
4    44   open
5    44  close
6    44  close
7    44  close
8    44  close
9    44   open
10   44  close
13   44   open
19   44   open

如果您想在所有列上测试条件:

mask = np.all([df[c].isin(filter_dict[c][0]) for c in df.columns], axis=0)
df[mask]

输出:

type method
4    44   open
9    44   open
13   44   open
19   44   open

最新更新