python - 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
解决方案
让我们试试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
推荐阅读
- spring - 通过替换 HornetQ 添加 ActiveMQ 时服务器启动时出错
- angular - Angular 基于组件变量使用 *ngTemplateOutlet 动态显示模板
- java - 从发布的评论中删除方法名称
- docker - 运行 Docker 注册表时 :2 是什么意思?
- c# - 在控制器 C# 中选择具有动态变量的模型字段
- javascript - 如何将javascript日期字符串从年月号(2019-1)格式化为月年(2019年1月)
- wordpress - 如何跟踪来自 Wpform 提交的 Google Ads 转化?
- javascript - 无法在 Safari 中对变量 OfflineAudioContext 进行微调
- c# - 在 C# 中实现我自己的泛型集合
- vue.js - 在 Vue 中使用具有相同代码库的不同供应商