Применить функцию к каждой строке в pandas DataFrame, используя несколько значений столбцов в качестве параметров - PullRequest
0 голосов
/ 22 апреля 2020

Учитывая pandas 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 будет результатом применения example_hash к столбцам name & 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 centri c. Я понимаю, что можно построить python list, итерировать по строкам, и добавьте в список, который в конечном итоге станет колонкой.

Заранее благодарим вас за внимание и ответ.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2020

Вы можете сделать это без изменения метода 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.apply с lambda вот так без изменения пользовательского метода:

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
1 голос
/ 22 апреля 2020

Вы можете использовать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...