2015-06-13 40 views
4

说我有一定的映射:应用功能列在大熊猫数据帧有两个参数

mapping = { 
    'cat': 'purrfect', 
    'dog': 'too much work', 
    'fish': 'meh' 
    } 

dataframe

animal name  description 
0 cat  sparkles NaN 
1 dog  rufus  NaN 
2 fish mr. blub NaN 

我想用在description列以编程方式填写animal专栏和mapping字典作为输入:

def describe_pet(animal,mapping): 
    return mapping[animal] 

当我尝试用熊猫apply()功能:

df['description'].apply(describe_pet,args=(df['animal'],mapping)) 

我得到以下错误:

TypeError: describe_pet() takes exactly 2 arguments (3 given) 

好像使用apply()是微不足道传递一个函数参数。我如何用两个参数来做到这一点?

回答

2

建议的答复解决了您的具体问题,但对于更通用的情况:

args参数是除列以外的参数:

args : tuple Positional arguments to pass to function in addition to the array/series

pandas.DataFrame.apply

5

您可以用map方法做到这一点没有写一个函数或使用apply都:

df['description'] = df.animal.map(mapping) 
+0

这是非常优雅,当然最适合我的特殊情况。 Ophir Yoktan的回答适用于更一般的问题。 –