你好,我试图过滤掉另一个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])]
当我尝试像这样过滤下一列时,我得到了一个空的dataframe
df[df['type'].isin(filter_dict['type'][0])]
想想为什么会发生这种事,你的答案
熊猫版本是0.23.4
发布于 2022-03-28 00:30:47
您的示例是无效的(您在random.choice
中有一个唯一的值,因此出现了熊猫错误),但是,否则,代码就像预期的那样工作:
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
https://stackoverflow.com/questions/71644380
复制