根据另一列(同一行和上一行)中的值以及上一行中的新列创建新的数据框列

问题描述 投票:0回答:1

我希望在数据框中基于使用两行的另一列和新列本身创建一列。我正在尝试复制和超越函数,除非满足特定条件,否则该函数会创建持续的值总和。

如果我有以下列:

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。

谢谢你,

python dataframe conditional-statements cumulative-sum
1个回答
1
投票

欢迎来到 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
© www.soinside.com 2019 - 2024. All rights reserved.