【发布时间】:2018-06-07 14:01:24
【问题描述】:
我想对pandas DataFrame 应用一个具有多个返回的函数,并将结果放在DataFrame 的单独新列中。
所以给定这样的东西:
import pandas as pd
df = pd.DataFrame(data = {'a': [1, 2, 3], 'b': [4, 5, 6]})
def add_subtract(a, b):
return (a + b, a - b)
目标是在a 和b 上调用add_subtract 的单个命令,以在df 中创建两个新列:sum 和difference。
我认为这样的事情可能会奏效:
(df['sum'], df['difference']) = df.apply(
lambda row: add_subtract(row['a'], row['b']), axis=1)
但它会产生这个错误:
----> 9 lambda 行:add_subtract(row['a'], row['b']), axis=1)
ValueError:解包的值太多(预计 2 个)
编辑:除以下答案外,pandas apply function that returns multiple values to rows in pandas dataframe 表明该函数可以修改为返回列表或Series,即:
def add_subtract_list(a, b):
return [a + b, a - b]
df[['sum', 'difference']] = df.apply(
lambda row: add_subtract_list(row['a'], row['b']), axis=1)
或
def add_subtract_series(a, b):
return pd.Series((a + b, a - b))
df[['sum', 'difference']] = df.apply(
lambda row: add_subtract_series(row['a'], row['b']), axis=1)
两者都有效(后者相当于 Wen 接受的答案)。
【问题讨论】: