为了账号安全,请及时绑定邮箱和手机立即绑定

在具有多个参数和多个输出的熊猫中应用函数

在具有多个参数和多个输出的熊猫中应用函数

RISEBY 2022-12-27 17:12:40
我有一个函数foo(),它将两个参数作为 pandas 的两列,分别命名为年和月,并返回一个包含四个数字的列表。  df['A'],df['B'],df['C'],df['D']=  df.apply(lambda x: foo(x.year, x.month), axis=1,result_type="expand")它只是给了我四个名为 A、B、C、D 的列,分别填充了 0、1、2、3。我究竟做错了什么?请不要回答单变量输出或单变量参数。那里有很多例子。十分感谢你的帮助。
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您错误地分配了df.apply带有可选参数的结果result_type='expand',而是使用:


df[['A', 'B', 'C', 'D']] =  df.apply(lambda x: foo(x.year, x.month), axis=1, result_type="expand")

考虑证明这一点的例子,


df = pd.DataFrame({'col1': np.arange(5), 'col2': np.arange(5) * 2})


#print(df)

   col1  col2

0     0     0

1     1     2

2     2     4

3     3     6

4     4     8

重现问题情况,


df['A'], df['B'] = df.apply(lambda s: (s['col1']**2, s['col2']**2), axis=1, result_type='expand')


#print(df)

   col1  col2  A  B

0     0     0  0  1

1     1     2  0  1

2     2     4  0  1

3     3     6  0  1

4     4     8  0  1

解决方案是,


df[['A', 'B']] = df.apply(lambda s: (s['col1']**2, s['col2']**2), axis=1, result_type='expand')


#print(df)

   col1  col2   A   B

0     0     0   0   0

1     1     2   1   4

2     2     4   4  16

3     3     6   9  36

4     4     8  16  64

要么:


df['A'], df['B'] = df.apply(

lambda s: (s['col1']**2, s['col2']**2), axis=1, result_type='expand').T.to_numpy()


#print(df)

   col1  col2   A   B

0     0     0   0   0

1     1     2   1   4

2     2     4   4  16

3     3     6   9  36

4     4     8  16  64


查看完整回答
反对 回复 2022-12-27
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信