使用多列值作为参数将函数应用于pandas DataFrame中的每一行



给定具有多列的熊猫DataFrame

pd.DataFrame({'name': ['Bob', 'Alice'], 'age': [20, 40], 'height': [2.0, 2.1]})
name  age  height
0    Bob   20     2.0
1  Alice   40     2.1

以及一个采用多个参数的函数

def example_hash(name: str, age: int) -> str:
return "In 10 years {} will be {}".format(name, age+10)

如何使用包含将函数应用于其他列的子集的结果的附加列来更新DataFrame

所得到的DataFrame将是将CCD_ 2应用于CCD_;age列:

name  age  height                            hash
0    Bob   20     2.0     In 10 years Bob would be 30
1  Alice   40     2.1    In 10 years Alice will be 50

我对以pandas为中心的响应感兴趣我知道可以构造一个pythonlist,对行进行迭代,并将其附加到最终成为列的列表中。

提前感谢您的考虑和回复。

您可以在不更改example_hash()方法的情况下执行此操作:

只需使用np.vectorize

In [2204]: import numpy as np 
In [2200]: def example_hash(name: str, age: int) -> str: 
...:     return "In 10 years {} will be {}".format(name, age+10) 
...:                                    
In [2202]: df['new'] = np.vectorize(example_hash)(df['name'], df['age'])                                                                                                                                    
In [2203]: df                                                                                                                                                                                               
Out[2203]: 
name  age  height                           new
0    Bob   20     2.0    In 10 years Bob will be 30
1  Alice   40     2.1  In 10 years Alice will be 50

或者像这样将df.applylambda一起使用,而不更改您的自定义方法:

In [2207]: df['new'] = df.apply(lambda x: example_hash(x['name'], x['age']), axis=1)                                                                                                                        
In [2208]: df                                                                                                                                                                                               
Out[2208]: 
name  age  height                           new
0    Bob   20     2.0    In 10 years Bob will be 30
1  Alice   40     2.1  In 10 years Alice will be 50

您可以使用apply函数来迭代行并添加新列。

In [139]: df = pd.DataFrame({'name': ['Bob', 'Alice'], 'age': [20, 40], 'height': [2.0, 2.1]})
In [140]: df
Out[140]:
name  age  height
0    Bob   20     2.0
1  Alice   40     2.1

In [142]: def example_hash(row):
...:     row['hash']= "In 10 years {} will be {}".format(row['name'], row['age']+10)
...:     return row
...:
In [143]: df = df.apply(example_hash,axis=1)
In [144]: df
Out[144]:
name  age  height                          hash
0    Bob   20     2.0    In 10 years Bob will be 30
1  Alice   40     2.1  In 10 years Alice will be 50

相关内容

  • 没有找到相关文章

最新更新