使用pandas apply和自定义函数返回多个列

4 投票
1 回答
3703 浏览
提问于 2025-04-20 12:18

假设我有一个函数:

def fn(x)
    y = x ** 2
    z = x ** 3
    return y, z

我想用 df['x'].apply(lambda x: fn(x)) 来返回 yz,并把它们放在不同的列里。有没有什么好的方法可以做到这一点,同时还使用 fn(x) 呢?实际上,我的函数会复杂得多,所以我只想在 apply 里面运行一次这个函数,然后把 output[0]output[1] 等分别赋值给不同的列。

1 个回答

3

这个方法怎么样?(注意,我根据下面的评论修改了这个回答)所以应用的步骤可以使用一个共享计算的单一函数,并返回合并步骤所需的系列数据。

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = pd.DataFrame(data, columns = ['year','state','pop'])
def fn(x,head1,head2):
    y = x ** 2
    z = x ** 3
    return pd.Series({head1:y, head2:z}) 
frame = frame.merge(frame['pop'].apply(lambda s: fn(s,'xsqr','xcube')), left_index=True, right_index=True)

结果:

   year   state  pop   xcube   xsqr
0  2000    Ohio  1.5   3.375   2.25
1  2001    Ohio  1.7   4.913   2.89
2  2002    Ohio  3.6  46.656  12.96
3  2001  Nevada  2.4  13.824   5.76
4  2002  Nevada  2.9  24.389   8.41

撰写回答