在Pandas数据框中,按一列排序,然后按另一列分组



这是一个与我可以找到的类似措辞的问题相反的问题,例如:

  • Pandas-按一列分组,按另一列排序,从第三列获取值
  • 如何按一列分组并对另一列的值进行排序

说,我有这个DataFrame:

import pandas as pd
df = pd.DataFrame({
'model': ['Punto', 'Doblo', 'Panda', 'Doblo','Punto', 'Tipo'] ,
'timestamp': ['20200124_083155', '20200124_122052', '20200124_134350', '20200124_150801', '20200124_163540', '20200124_195955']
})
print(df)

打印出来:

model        timestamp
0  Punto  20200124_083155
1  Doblo  20200124_122052
2  Panda  20200124_134350
3  Doblo  20200124_150801
4  Punto  20200124_163540
5   Tipo  20200124_195955

我想得到的是:首先按时间戳排序;然后按照出现的顺序,按出现的顺序分组,但没有额外的";组";pandas.groupby子句将添加的列;也就是说,我想获得最终输出:

model        timestamp
0  Punto  20200124_083155
1  Punto  20200124_163540
2  Doblo  20200124_122052
3  Doblo  20200124_150801
4  Panda  20200124_134350
5   Tipo  20200124_195955

我怎样才能做到这一点?

我认为这是可能的,通过排序的类别,在第一步中按排序的timestamp值设置顺序,然后按DataFrame.sort_values:按两列排序

c = df.sort_values('timestamp')['model'].unique()
df['model'] = pd.Categorical(df['model'], ordered=True, categories=c)
df = df.sort_values(['model','timestamp'])
print (df)
model        timestamp
0  Punto  20200124_083155
4  Punto  20200124_163540
1  Doblo  20200124_122052
3  Doblo  20200124_150801
2  Panda  20200124_134350
5   Tipo  20200124_195955

相关内容

最新更新