python pandas применить, как заменить функцию лямбда-функцией? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть фрейм данных и функция, которую я хотел бы применить:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({
...         'A' : ['A1', 'A2', 'A3'],
...         'B' : ['B1', 'B2', 'B3'],
...         'format_str' : [None, np.nan, 'A = {A}, B = {B}']
...     }
... )
>>> df
    A   B        format_str
0  A1  B1              None
1  A2  B2               NaN
2  A3  B3  A = {A}, B = {B}
>>> def gen_format_str(ser):
...     if pd.isna(ser.format_str):
...         return ser.A
...     else:
... #         return ser.format_str.format(A = ser.A, B=ser.B)
...         return ser.format_str.format(**ser)
...
>>> df['new_field'] = df.apply(
...             gen_format_str, axis=1
... )
>>> df
    A   B        format_str       new_field
0  A1  B1              None              A1
1  A2  B2               NaN              A2
2  A3  B3  A = {A}, B = {B}  A = A3, B = B3
>>>

Все работает как надо, но я хотел бы использовать лямбда-функцию вместо gen_format_str. Я пробовал разные подходы, но ни один из них не работал.

Как реализовать ту же функциональность gen_format_str с помощью лямбда-функции в методе apply?

С уважением.

1 Ответ

1 голос
/ 16 апреля 2020

Это похоже на работу:

df['new_field'] = df.apply(
    lambda ser: ser.A if pd.isna(ser.format_str) else ser.format_str.format(**ser),  
    axis=1  
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...