2016-08-16 36 views
1

我想使用一個掩碼作爲函數參數。什麼工作:爲熊貓數據框提供了一個掩碼作爲函數參數

data = pd.DataFrame([[50, 100, 1], [0, 2, 1]], columns=['a', 'b', 'c']) 

# the function argument 
kwargs = {'a': 0, 'b': 2, 'c':1} 

# generate a list of the elements 
temp = [] 
for item in kwargs.items(): 
    temp.append('(data.{}'.format(item[0]) + ' == {})'.format(item[1])) 
temp 

# generate mask as string 
mask = ' & '.join(elem for elem in temp) 

# apply mask 
data[eval(mask)] 

我在想,如果

一)還有一個更優雅的解決方案?

b)如果數據幀的大小變大,èval(mask)可能會導致麻煩嗎?

回答

1

以下應該工作。

data[pd.DataFrame(data[k] == v for k, v in kwargs.items()).all()] 

使用發電機理解,它創建的bool S爲data值是否等同於kwargs值的數據幀。它在該數據幀上調用.all(),並將其用作掩碼。

eval強烈建議不要在大多數代碼中使用 - 總會有更好的解決方案。例如,如果通過data.column_name(如果該名稱無效,例如x y)無法訪問該列,則eval(mask)將引發問題。

相關問題