pandas 使用apply向现有 Dataframe 添加2个新列

8dtrkrch  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(171)

我想使用apply函数:- 将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
mwngjboj

mwngjboj1#

您可以在apply中添加result_type='expand'
'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
wgeznvg7

wgeznvg72#

anky_91的回答突出了apply中的一个有用选项。
然而,对于该特定情况,甚至不需要apply

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

这是可行的,因为add_multiply只返回一个2系列(df.col1 + df.col2, df.col1 * df.col2)的元组,它使用pandas原生矢量化的+*。不需要迭代,而迭代是需要使用apply的。

相关问题