在 Pandas 中减少(折叠)

fev*_*nym 7 python pandas

Pandas DataFrame 是否有任何减少/折叠实现?例如,我想获得一个名为列数之和cost在数据帧df,使用类似lambda acc, x,这里x是一个数据帧一行。

我该怎么办?

PS 我知道 .sum(),但还有许多其他可能的\acc,x -> ...功能。

til*_*lmo 1

可以通过以下方式实现快速折叠(替换plus为您自己的函数):

import numpy as np
def accum(op,ser):
    u_op = np.frompyfunc(op, 2, 1) # two inputs, one output
    return u_op.accumulate(ser, dtype=np.object)
def plus(x,y):
    return x+y
accum(plus,np.arange(10))
Run Code Online (Sandbox Code Playgroud)

你得到:

array([0, 1, 3, 6, 10, 15, 21, 28, 36, 45], dtype=object)
Run Code Online (Sandbox Code Playgroud)

这适用于 numpy 系列,因此也适用于 pandas 数据帧的组件。拥有一个直接适用于数据帧的解决方案将会很有趣,这样可以组合多个系列。