我今天在工作中遇到了这个问题,我想知道是否有一种有效的方法可以做到这一点。
基本上我有一个像这样的数据框
df = pd.DataFrame([1,2,3], columns = ['a'])
我还有一个返回元组的函数。 (请注意,这只是一个最小的示例,我的问题有所不同)
compute = lambda x: (2*x, 3*x)
我需要找到一种方法来做一些看起来像这样的事情:
(df['b'], df['c']) = df['a'].apply(compute)
不幸的是,这种语法不起作用,我无法用另一种方法来解决问题。
唯一类似的问题是this ,但是该解决方案似乎真的很“ hacky”,我相信有更好的方法来做到这一点。
谢谢!
答案 0 :(得分:3)
IIUC,您可以尝试:
compute = lambda x: (2*x, 3*x)
df[['b','c']]=pd.DataFrame(df.a.apply(compute).tolist()) #thanks harvpan
#df[['b','c']]=pd.DataFrame(df.a.apply(compute).values.tolist())
print(df)
a b c
0 1 2 3
1 2 4 6
2 3 6 9
答案 1 :(得分:2)
另一种方式
df=df.reindex(columns=df.columns.tolist()+['b','c'])
df[['b','c']]=list(map(compute,df.a))
df
Out[107]:
a b c
0 1 2 3
1 2 4 6
2 3 6 9