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

我有一个函数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。我究竟做错了什么?

请不要回答单变量输出或单变量参数。那里有很多例子。十分感谢你的帮助。


RISEBY
浏览 73回答 1
1回答

MMMHUHU

您错误地分配了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  col20     0     01     1     22     2     43     3     64     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  B0     0     0  0  11     1     2  0  12     2     4  0  13     3     6  0  14     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   B0     0     0   0   01     1     2   1   42     2     4   4  163     3     6   9  364     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   B0     0     0   0   01     1     2   1   42     2     4   4  163     3     6   9  364     4     8  16  64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python