我正在尝试找出如何将累加函数应用于对象。对于数字,有几种替代方法,例如cumsum
和cumcount
。还有df.expanding可以与apply
一起使用。但是,我传递给apply
的函数无法在对象上工作。
import pandas as pd
df = pd.DataFrame({"C1": [1, 2, 3, 4],
"C2": [{"A"}, {"B"}, {"C"}, {"D"}],
"C3": ["A", "B", "C", "D"],
"C4": [["A"], ["B"], ["C"], ["D"]]})
df
Out:
C1 C2 C3 C4
0 1 {A} A [A]
1 2 {B} B [B]
2 3 {C} C [C]
3 4 {D} D [D]
在数据框中,我有整数值、集合、字符串和列表。现在,如果我尝试使用 expanding().apply(sum)
,我将得到累积总和:
df.expanding().apply(sum)
Out[69]:
C1 C2 C3 C4
0 1.0 {A} A [A]
1 3.0 {B} B [B]
2 6.0 {C} C [C]
3 10.0 {D} D [D]
我的期望是,由于求和可以应用于列表和字符串,所以我会得到类似于以下的结果:
C1 C2 C3 C4
0 1.0 {A} A [A]
1 3.0 {B} AB [A, B]
2 6.0 {C} ABC [A, B, C]
3 10.0 {D} ABCD [A, B, C, D]
我也尝试过类似这样的操作:
df.expanding().apply(lambda r: reduce(lambda x, y: x+y**2, r))
Out:
C1 C2 C3 C4
0 1.0 {A} A [A]
1 5.0 {B} B [B]
2 14.0 {C} C [C]
3 30.0 {D} D [D]
它的工作方式符合我的预期: 上一个结果是x
,当前行值是y
。但是我不能使用x.union(y)
来缩小,例如。
因此,我的问题是: 是否有任何替代expanding
的方法可以用于对象?这个例子只是为了说明expanding().apply()
在对象数据类型上不起作用。我正在寻找一个通用解决方案,支持将函数应用于这两个输入: 前一个结果和当前元素。
expanding().apply()
在对象上不起作用。我正在寻找一个在对象上也能工作的expanding().apply()
的替代方法。 - ayhan