将多个列添加到pandas数据帧

时间:2018-05-18 11:45:27

标签: python pandas dataframe apply

以下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

2 个答案:

答案 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']