首页 > 解决方案 > 如何计算熊猫数据框的两个值之间的行数?

问题描述

我有一个看起来像这样的列:

旗帜
0
1
1
1
1
0
0
1
1
1

我想计算/求和两个 0 之间的行数,结果如下:

旗帜 数数
0 5
1 5
1 5
1 5
1 5
0 1
0 4
1 4
1 4
1 4

我怎么得到这个?我已经尝试过 Pandas 中提到的解决方案- 在另一列中的值之间求和一列中的值这与我需要的非常相似,但我无法修改它以适应我的输出。

标签: pythonpandasdataframe

解决方案


使用cumsum创建标志为 0 的组。然后groupby 转换大小以获取组大小:

import pandas as pd

df = pd.DataFrame({
    'flag': {0: 0, 1: 1, 2: 1, 3: 1, 4: 1, 5: 0, 6: 0, 7: 1, 8: 1, 9: 1}
})

# Create Group IDs based on where 0s are
groups = df.flag.eq(0).cumsum()

# Groupby groups and transform each group to the size
df['Count'] = df.groupby(groups)['flag'].transform('size')

print(df)

df

   flag  Count
0     0      5
1     1      5
2     1      5
3     1      5
4     1      5
5     0      1
6     0      4
7     1      4
8     1      4
9     1      4

推荐阅读