提问人:Leo 提问时间:8/25/2019 更新时间:4/19/2023 访问量:3291
使用 apply 向现有数据帧添加 2 个新列
Add 2 new columns to existing dataframe using 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
答:
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
评论