Python 对组中的第一个连续匹配项进行计数
我对熊猫很陌生,我正在尝试计算这个数据帧中第一个连续的颜色实例的总数Python 对组中的第一个连续匹配项进行计数,python,pandas,numpy,Python,Pandas,Numpy,我对熊猫很陌生,我正在尝试计算这个数据帧中第一个连续的颜色实例的总数 car color 0 audi black 1 audi black 2 audi blue 3 audi black 4 bmw blue 5 bmw green 6 bmw blue 7 bmw blue 8 fiat green 9 fiat green 10 fiat green 11 fiat blue 由于我有它,
car color
0 audi black
1 audi black
2 audi blue
3 audi black
4 bmw blue
5 bmw green
6 bmw blue
7 bmw blue
8 fiat green
9 fiat green
10 fiat green
11 fiat blue
由于我有它,所以它可以计算第一种颜色出现的累计次数:
它在计算总数时效果很好
car colour_cars
0 audi 3
1 bmw 3
2 fiat 3
但事实证明我真正需要的是数一数第一个连续的和,所以应该是这样的
car colour_cars
0 audi 2
1 bmw 1
2 fiat 3
我曾尝试使用应用函数来停止序列.sum。如果.eq遇到False,如果能在.eq返回False后找到打破计数的方法,我将不胜感激。这里有一个稍微不同的方法: 根据车辆或颜色是否从一行更改到下一行来获取组ID df=df.assigngroup_id=df.shift1!=df.anyaxis=1.cumsum 分组并获取连续相同对的len df=df.joindf.groupby'group\u id'。applylen.重命名'concer\u len',on='group\u id' 为每辆车选择第一个长度 df1.按“车”分组。先奉献 df1 返回 汽车 奥迪2 宝马1 菲亚特3 姓名:Conce_len,数据类型:int64 你可以做:
# group by car and consecutive group of colors (compute count)
counts = df.groupby(['car', df.color.ne(df.color.shift()).cumsum()], as_index=False).count()
# fetch only the count corresponding to the first consecutive group of colors
result = counts[~counts.car.duplicated()].rename(columns={'color' : 'colour_cars'})
print(result)
输出
使用:
详情:
为测试颜色列的连续值创建辅助连续系列,传递到,删除从辅助函数中创建的第一级,通过第二次重置将索引转换为列,最后通过以下方式获取每辆车的第一行:
# group by car and consecutive group of colors (compute count)
counts = df.groupby(['car', df.color.ne(df.color.shift()).cumsum()], as_index=False).count()
# fetch only the count corresponding to the first consecutive group of colors
result = counts[~counts.car.duplicated()].rename(columns={'color' : 'colour_cars'})
print(result)
car colour_cars
0 audi 2
3 bmw 1
6 fiat 3
df = (df.groupby(['car', df.color.ne(df.color.shift()).cumsum()])
.size()
.reset_index(level=1, drop=True)
.reset_index(name='colour_cars')
.drop_duplicates('car'))
print (df)
car colour_cars
0 audi 2
3 bmw 1
6 fiat 3
print (df.color.ne(df.color.shift()).cumsum())
0 1
1 1
2 2
3 3
4 4
5 5
6 6
7 6
8 7
9 7
10 7
11 8
Name: color, dtype: int32