我有一个数据框和要应用的功能:
>>> 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的相同功能?
问候
这似乎正在完成工作:
df['new_field'] = df.apply(
lambda ser: ser.A if pd.isna(ser.format_str) else ser.format_str.format(**ser),
axis=1
)