假设我有一个pandas数据框和一个如下定义的字典:
import pandas as pd
df = pd.DataFrame( { "c1": np.array(['a','a','b','b','a']) , "c2" : np.array([1,2,2,2,2])} )
c1 c2
0 a 1
1 a 2
2 b 2
3 b 2
4 a 2
to_keep = {'a':[1],'b':[2,3]}
{'a': [1], 'b': [2, 3]}
我希望将这些元素保留在to_keep
的键和值之一的位置。换句话说,我想得到以下数据帧:
c1 c2
0 a 1
2 b 2
3 b 2
我尝试了很多东西,比如df[(df["c1"] in to_keep.keys) and df["c2"] in to_keep["c1"]]
,但问题是我无法将正确的参数传递给to_keep dict来获取适当的值。我曾想过列出c1
和c2
的所有可能组合,但这对于我拥有的数据集的大小来说可能有点低效。
有什么建议吗?
答案 0 :(得分:2)
尝试在数据框中转换to_keep,然后将其与原始内容合并,例如Compare Python Pandas DataFrames for matching rows
答案 1 :(得分:1)
import pandas as pd
import numpy as np
df = pd.DataFrame(
{ "c1": np.array(['a','a','b','b','a']) ,
"c2": np.array([1,2,2,2,2])} )
to_keep = {'a':[1],'b':[2,3]}
to_keep = pd.DataFrame([(key, item) for key, val in to_keep.items() for item in val],
columns=['c1', 'c2'])
# c1 c2
# 0 a 1
# 1 b 2
# 2 b 3
print(pd.merge(df, to_keep, how='inner'))
产量
c1 c2
0 a 1
1 b 2
2 b 2