【问题标题】:pandas apply function with arguments no lambda熊猫应用没有参数的函数 lambda
【发布时间】:2016-09-17 05:29:26
【问题描述】:

我正在尝试使用 apply args 参数将函数应用于数据帧的行。我看到multiplesimilarquestions,但遵循解决方案似乎不起作用。我创建了一个示例。

在这里,我将我的数据框除以其列的总和

pij=pd.DataFrame(np.random.randn(500,2))
pij.divide(pij.sum(1),axis=0).head() 
          0         1
0  1.077353 -0.690463
1  0.608302  0.583209
2 -0.724272 -1.665318
3 -0.735404 -0.606744
4 -0.033409 -0.162695

我知道如何使用 lambda 来返回相同的结果

def lambda_divide(row):
    return row / row.sum(0)
pij.apply(lambda row: lambda_divide(row), axis=1).head()
          0         1
0  1.077353 -0.690463
1  0.608302  0.583209
2 -0.724272 -1.665318
3 -0.735404 -0.606744
4 -0.033409 -0.162695

但是,当我尝试使用 apply 参数时,它不起作用

pij.apply(np.divide,args=(pij.sum(1)))

【问题讨论】:

    标签: python pandas lambda dataframe apply


    【解决方案1】:

    完整的错误表明这是由于 pandas 特殊的套管 ufuncs:

       4045
       4046         if isinstance(f, np.ufunc):
    -> 4047             results = f(self.values)
       4048             return self._constructor(data=results, index=self.index,
       4049                                      columns=self.columns, copy=False)
    
    ValueError: invalid number of arguments
    

    这看起来像一个错误!


    在这种特定情况下,您可以使用 div:

    In [11]: df.div(df.sum(1), axis=0)
    Out[11]:
              0         1
    0  2.784649 -1.784649
    1  0.510530  0.489470
    2  0.303095  0.696905
    3  0.547931  0.452069
    4  0.170364  0.829636
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 2022-01-04
      • 2022-01-11
      • 2020-04-30
      • 2018-03-21
      • 2020-10-20
      • 2019-11-10
      • 1970-01-01
      相关资源
      最近更新 更多