gpt4 book ai didi

python - Pandas 根据另一列的条件重置 cumsum()

转载 作者:行者123 更新时间:2023-12-04 07:30:16 25 4
gpt4 key购买 nike

我有一个名为“on”的列,其中包含一系列 0 和 1:

d1 = {'on': [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0]}
df = pd.DataFrame(d1)
我想创建一个名为“值”的新列,以便它进行累积计数 cumsum()仅当“on”列的“1”打开并在“on”列显示为零时从零重新计数。
我尝试使用 cumsum() 的组合和 np.where但我没有得到我想要的如下:
df['value_try'] = df['on'].cumsum()
df['value_try'] = np.where(df['on'] == 0, 0, df['value_try'])
试图:
    on  value_try
0 0 0
1 0 0
2 0 0
3 1 1
4 1 2
5 1 3
6 0 0
7 0 0
8 1 4
9 1 5
10 0 0
我想要的输出是:
    on  value
0 0 0
1 0 0
2 0 0
3 1 1
4 1 2
5 1 3
6 0 0
7 0 0
8 1 1
9 1 2
10 0 0

最佳答案

您可以通过检查 on 的值是否设置连续的 0 或 1 组。等于前一行的 .shift() 并通过 .Series.cumsum() 获取组号.然后对于每个组使用 .Groupby.cumsum() 获取组内的值。

g = df['on'].ne(df['on'].shift()).cumsum()
df['value'] = df.groupby(g).cumsum()
结果:
print(df)

on value
0 0 0
1 0 0
2 0 0
3 1 1
4 1 2
5 1 3
6 0 0
7 0 0
8 1 1
9 1 2
10 0 0

关于python - Pandas 根据另一列的条件重置 cumsum(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67973031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com