我有一个数据框:
d = {'col1':['2q','48', '48-49']}
test = pd.DataFrame(d)
col1
0 2q
1 48
2 48-49
用于制图的字典:
mupcs_to_pc_mapping = {'24': ['48-49', '48', '49'], #M2
'23': ['50-51', '50', '51'], #M3
'22': ['52-53', '52', '53'], #M4
'21': ['54-55', '54', '55'], #M5
}
我想测试测试数据帧的每个值,看它是否存在于mupcs_to_pc_mapping dict值中。
所以最终的结果是:
0 False
1 True
2 True
我尝试了一种变体:
test['col1'].isin(mupcs_to_pc_mapping.values())
和
test['col1'].any(value for value in mupcs_to_pc_mapping.values())
但两者都会导致错误。
有谁知道我的代码出了什么问题?
答案 0 :(得分:5)
你也可以这样做:
test.isin(pd.DataFrame(mupcs_to_pc_mapping).stack().values)
col1
0 False
1 True
2 True
答案 1 :(得分:4)
我认为你需要
test.col1.isin(sum(mupcs_to_pc_mapping.values(),[]))
Out[477]:
0 False
1 True
2 True
Name: col1, dtype: bool
在评论itertools.chain
list(itertools.chain.from_iterable(mupcs_to_pc_mapping.values()))
答案 2 :(得分:3)
首先,反转您的映射:
m = {v : k for k in mupcs_to_pc_mapping for v in mupcs_to_pc_mapping[k]}
现在,使用map
并测试NaN
s。
test.col1.map(m).notnull()
0 False
1 True
2 True
Name: col1, dtype: bool
答案 3 :(得分:3)
创建一个集合,它是所有字典值的并集
test.col1.isin(set.union(*map(set, mupcs_to_pc_mapping.values())))
0 False
1 True
2 True
Name: col1, dtype: bool