【发布时间】:2021-05-21 20:43:46
【问题描述】:
考虑这个例子
import pandas as pd
import numpy as np
df = pd.DataFrame({'var1' : [1,2,3,4],
'var2' : ['a','b','c','d']})
df
Out[100]:
var1 var2
0 1 a
1 2 b
2 3 c
3 4 d
我有一个函数,它将var1 作为输入并返回三个值,我想将它们存储到三个不同的变量中。以下似乎工作正常
def myfunc(var):
return [['small list'], var + 2, ['another list']]
df.var1.apply(lambda x: myfunc(x))
Out[101]:
0 [[small list], 3, [another list]]
1 [[small list], 4, [another list]]
2 [[small list], 5, [another list]]
3 [[small list], 6, [another list]]
Name: var1, dtype: object
但是,当我尝试创建相应的变量时出现错误
df[['my small list', 'my numeric', 'other list']] = df.var1.apply(lambda x: myfunc(x))
ValueError: Must have equal len keys and value when setting with an iterable
你怎么看?
我曾经在Return multiple columns from pandas apply() 中使用了很棒的zip 解决方案,但是对于当前的Pandas 1.2,这个解决方案不再起作用了
谢谢!
【问题讨论】:
-
你可以尝试应用这个答案:stackoverflow.com/questions/35491274/…
-
顺便说一句,如果你已经有这个函数,你不需要创建一个lambda函数,你可以做
df.var1.apply(myfunc) -
问题是数据框还包含我需要保留的其他列。这个解决方案在这里似乎不是最优的
-
我把答案写出来(其他栏也可以保留)