2015-12-17 76 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