采用:
df = df.groupby(df['values'].ne(df['values'].shift()).cumsum())['values'].value_counts()
要么:
df = df.groupby([df['values'].ne(df['values'].shift()).cumsum(), 'values']).size()
print (df)values values1 10 22 23 23 9 34 10 45 12 1Name: values, dtype: int64
最后删除第一级:
df = df.reset_index(level=0, drop=True)print (df)values10 223 29 310 412 1dtype: int64
说明 :
将原始列按
shifted与不等于进行比较
ne,然后添加
cumsumhelper
Series:
print (pd.concat([df['values'], a, b, c], keys=('orig','shifted', 'not_equal', 'cumsum'), axis=1)) orig shifted not_equal cumsum0 10 NaN True 11 10 10.0 False 12 23 10.0 True 23 23 23.0 False 24 9 23.0 True 35 9 9.0 False 36 9 9.0 False 37 10 9.0 True 48 10 10.0 False 49 10 10.0 False 410 10 10.0 False 411 12 10.0 True 5


