python - 如何根据ID计算同一组内的计数
问题描述
我的数据框看起来像:
df = pd.DataFrame({"ID":['A','B','A','A','B','B','C','D','D','C'],
'count':[1,1,2,2,2,2,1,1,1,2]})
print(df)
ID count
0 A 1
1 B 1
2 A 2
3 A 2
4 B 2
5 B 2
6 C 1
7 D 1
8 D 1
9 C 2
我将只有ID
列,我想计算count
列。逻辑是我想累计计算ID
. 如果它立即重复,index 2 & 3
他们都应该得到相同的计数。我怎样才能做到这一点?
我的尝试没有给出准确的结果:
df['x'] = df['ID'].eq(df['ID'].shift(-1)).astype(int)
df.groupby('ID')['x'].transform('cumsum')+1
0 1
1 1
2 2
3 2
4 2
5 2
6 1
7 2
8 2
9 1
Name: x, dtype: int32
该问题与 groupby 累积计数没有直接关系,但有所不同。
解决方案
我们可以做filter
然后reindex
回来
(df[df.ID.ne(df.ID.shift())].groupby('ID').cumcount().add(1)
.reindex(df.index,method='ffill'))
Out[10]:
0 1
1 1
2 2
3 2
4 2
5 2
6 1
7 1
8 1
9 2
dtype: int64
推荐阅读
- sql - SQL似乎在说1不是整数
- reactjs - 来自服务器套接字的更新不会在反应 ui 中重新呈现
- c# - C# windows 服务 - 每秒调用方法的最佳方式(不带 Windows.Forms.Timer)
- delphi - 如何在 TProgressBar 上显示打印进度
- javascript - 如何找到最接近给定数字对的数字对?
- css - 角材料粘性标题停止工作
- rust - 满足函数参数的生命周期
- python - 在 selenium 上未按名称/ID 找到元素
- r - 从未定义泛型函数的包中导入 S3 方法
- networking - 如何从虚拟机按名称访问 GCP 中的 kubernetes 服务?