python pandas如何使用lambda函数替换函数?

问题描述 投票:0回答:1

我有一个数据框和要应用的功能:

>>> 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
>>>

一切正常,但我想使用lambda函数代替gen_format_str。我尝试了不同的方法,但没有一个起作用。

如何在apply方法中使用lambda函数来实现gen_format_str的相同功能?

问候

python-3.x pandas lambda apply
1个回答
0
投票

这似乎正在完成工作:

df['new_field'] = df.apply(
    lambda ser: ser.A if pd.isna(ser.format_str) else ser.format_str.format(**ser),  
    axis=1  
)
© www.soinside.com 2019 - 2024. All rights reserved.