繁体   English   中英

在 Pandas Dataframe 中按一列排序,然后按另一列分组?

[英]Sort by one column, then group by another, in Pandas Dataframe?

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

说,我有这个 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

我想获得的是:首先按时间戳排序; 然后按照出现的顺序,按出现的顺序分组 - 但没有熊猫.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对两列进行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM