我有一个名为“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] 删除。
我来说两句