2016-08-16 58 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)将引发问题。

相关问题