我有一个名为“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/