使用 apply 向现有数据帧添加 2 个新列

Add 2 new columns to existing dataframe using apply

提问人:Leo 提问时间:8/25/2019 更新时间:4/19/2023 访问量:3291

问:

我想使用应用函数: - 接受 2 列作为输入 - 根据函数输出两列新列。

一个例子是这个add_multiply函数。

#function with 2 column inputs and 2 outputs
def add_multiply (a,b):
  return (a+b, a*b )

#example dataframe
df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

#this doesn't work
df[['add', 'multiply']] = df.apply(lambda x: add_multiply(x['col1'], x['col2']), axis=1)

理想结果:

col1  col2  add  multiply
1     3     4    3
2     4     6    8

熊猫 数据帧 应用

评论


答:

22赞 anky 8/25/2019 #1

您可以添加:result_type='expand'apply

'expand' :类似列表的结果将转换为列。

df[['add', 'multiply']]=df.apply(lambda x: add_multiply(x['col1'], x['col2']),axis=1,
                             result_type='expand')

或者调用 DataFrame 构造函数:

df[['add', 'multiply']]=pd.DataFrame(df.apply(lambda x: add_multiply(x['col1'], 
                                    x['col2']), axis=1).tolist())

   col1  col2  add  multiply
0     1     3    4         3
1     2     4    6         8

评论

0赞 Michel Lemay 9/30/2023
如果数据帧为空,则此操作不起作用。
9赞 Mark Wang 8/25/2019 #2

anky_91 的回答突出显示了 中的一个有用选项。apply

然而,对于这种特殊情况,甚至不需要,apply

df['add'], df['multiply'] = add_multiply(df['col1'],df['col2'])

这是有效的,因为add_multiply只返回一个具有 2 个系列的元组,它使用 pandas-native vectorized 和 。不需要迭代,这时您需要使用 .(df.col1 + df.col2, df.col1 * df.col2)+*apply