首页 > 解决方案 > Pandas 根据另一列的条件重置 cumsum()

问题描述

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

d1 = {'on': [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0]}
df = pd.DataFrame(d1)

我想创建一个名为“值”的新列,以便cumsum()仅在“开”列的“1”打开时进行累积计数,并在“开”列显示为零时从零重新计数。

我尝试使用 and 的组合,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

标签: pythonpython-3.xpandas

解决方案


让我们试试cumcount+cumsum

df['out'] = df.groupby(df['on'].eq(0).cumsum()).cumcount()
Out[18]: 
0     0
1     0
2     0
3     1
4     2
5     3
6     0
7     0
8     1
9     2
10    0
dtype: int64

推荐阅读