pandas 从Series.apply中解包 Dataframe 的多个列上的元组

wxclj1h5  于 2023-03-11  发布在  其他
关注(0)|答案(3)|浏览(140)

我今天在工作中遇到了这个问题,我想知道是否有一个有效的方法来解决这个问题。
基本上,我有一个 Dataframe ,看起来像这样

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”,我相信有一个更好的方法来做。
谢谢你!

cwdobuhd

cwdobuhd1#

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
3yhwsihp

3yhwsihp2#

另一种方法

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
polhcujo

polhcujo3#

一个简单的方法

df[['b','c']] = df['a'].apply(compute).tolist()

相关问题