【问题标题】:Sort by one column, then group by another, in Pandas Dataframe?在 Pandas Dataframe 中按一列排序,然后按另一列分组?
【发布时间】:2020-12-14 23:58:34
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 结果不是刚刚排序 df 数据框还是我遗漏了什么?

标签: python pandas dataframe sorting


【解决方案1】:

我认为这可以通过有序的分类来实现,在第一步中按排序的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

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 2014-03-17
    • 2019-10-17
    • 2019-01-13
    • 1970-01-01
    • 2021-08-26
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多