以下Python代码可以正常工作
import pandas as pd
df = pd.DataFrame(data = {'a': [1, 2, 3], 'b': [4, 5, 6]})
def myfun(a, b):
return [a + b, a - b]
df[['x', 'y']] = df.apply(
lambda row: myfun(row.a, row.b), axis=1)
生成的pandas数据框如下所示:
print(df)
a b x y
0 1 4 5 -3
1 2 5 7 -3
2 3 6 9 -3
但是,如果我尝试再添加两列,
df[['xx','yy']] = df.apply(lambda row: myfun(row.a, row.b), axis=1)
我收到错误消息
KeyError: "['xx' 'yy'] not in index"
为什么?这样做的正确方法是什么?
非常感谢!
// A
答案 0 :(得分:1)
需要将返回输出转换为Series
:
def myfun(a, b):
return pd.Series([a + b, a - b])
df[['x', 'y']] = df.apply(
lambda row: myfun(row.a, row.b), axis=1)
print (df)
a b x y
0 1 4 5 -3
1 2 5 7 -3
2 3 6 9 -3
答案 1 :(得分:0)
您可以指定系列的元组:
df['xx'], df['yy'] = df.apply(lambda row: myfun(row.a, row.b), axis=1)
但这与直接分配相比效率低:除非你绝对必须,否则不要使用pd.DataFrame.apply
,这只是一个奇特的循环。
df['xx'] = df['a'] + df['b']
df['yy'] = df['a'] - df['b']