2015-12-17 36 views
2

说我有一个熊猫数据帧和字典如下定义:索引上,在大熊猫数据帧相依为命多个参数

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字典能得到相应的价值。我曾经想过做的c1c2所有可能的组合的名单,但可能是有点低效率的关于数据集的大小我有。

有什么建议吗?

回答

1

充实lib's suggestion

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 
+0

看起来不错。但它(最)效率高吗?如果'a'和'b'的组合数量非常大? – Guido