一次将df.apply()的输出写入多列

时间:2019-04-13 16:27:13

标签: python pandas

我正在尝试编写将多个参数返回到多个Pandas列的函数的结果。

最初,我使用zip(* df.apply(..)),但是感觉非常“ hacky”且不具备Python风格。

我发现df.apply()有一个参数result_type ='expand',它似乎可以满足我的要求:返回多列。

但是,将结果扩展到列时,我会收到非常奇怪的结果(请参见代码)。

df['A'] = range(4)

def square(row):
    return row['A']**2, row['A']**3
df.apply(square, axis=1, result_type='expand')
>>>
    0   1
0   0   0
1   1   1
2   4   8
3   9   27
df['B'], df['C'] = df.apply(square, axis=1, result_type='expand')
df
>>>
    A   B   C
0   0   0   1
1   1   0   1
2   2   0   1
3   3   0   1

我希望DF ['B']和DF ['C']包含具有正确值的返回列0和1,但它们包含0系列和1系列。

将apply函数的结果写入多个DataFrame列的正确和Pythonic方法是什么?

1 个答案:

答案 0 :(得分:1)

尝试在创建2个新列时分配展开,例如:

../

df[['B','C']]=df.apply(square, axis=1, result_type='expand')
print(df)