我希望在数据框中基于使用两行的另一列和新列本身创建一列。我正在尝试复制和超越函数,除非满足特定条件,否则该函数会创建持续的值总和。
如果我有以下列:
A栏 0 0 1 2 3 0 0 1 4
下一列的 Excel 将是 B 列,其中如果 A 列单元格 = 0,则 B 列单元格 = 0,但如果 A 列 = X,B 列 = X + [B 列前一行的值]
使用此公式和上面的 A 列、B 列将是:
B 栏 0 0 1 3 = 1 + 2 6 = 3 + 3 0 0 1 5 = 1 + 4
我不太确定这是否可能,因为新列正在引用自身。我查看了 loc 和 iloc 函数,但找不到如何使偏移工作 - 我看到有一个移位函数,但我也有一个条件函数,例如 df["B"] = df.loc[ df["A"] == 0 ....
我对 Python 编程还很陌生,我什至无法真正开始使用它。我可以编写基本公式来根据另一列中的值创建新列,但是对多行的引用对我来说是有问题的。也许不止一步地完成这件事是一种方法。
在数据框之外,编写一个递归公式来模仿 Excel 似乎很简单:
在单元格 B2 = if(A2 = 0, 0, A2+B1) 中,B1 始终为 0。
谢谢你,
欢迎来到 StackOverflow,祝 Pandas 好运!这绝对是可行的,虽然有点先进。它属于所谓的“
streaks and islands
”问题类别,即在数据列中查找与模式匹配的组。在本例中,我们需要累积和 (cumsum
),但每次达到 0 时都会重置。
import pandas as pd
column_a = pd.Series([0, 0, 1, 2, 3, 0, 0, 1, 4])
# find rows which equal 0, these begin a new pattern
streaks = column_a == 0
# each pattern beginning is a new group, group by these and cumsum
column_b = column_a.groupby(streaks.cumsum()).cumsum()
给我们想要的输出:
0 0
1 0
2 1
3 3
4 6
5 0
6 0
7 1
8 5
dtype: int64