熊猫根据另一列的条件重置 cumsum()

manwong0606

我有一个名为“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是否等于前一行的值.shift()并获取组号 by来设置连续的 0 或 1.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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章