代码之家  ›  专栏  ›  技术社区  ›  ThatQuantDude

数据帧中日期组内的分类排序

  •  1
  • ThatQuantDude  · 技术社区  · 9 月前

    我有一个像这样的数据帧,我想确保按日期排序,并有 对于状态emtrys的侧面,我希望看到每个日期S之前的顶部有B条目。但也要保留只有一个条目的日期。

    tempDF = pd.DataFrame({ 'id': [12,12,12,12,45,45,45,51,51,51,51,51,51,76,76,76],
                    'date': ['2015-05-01','2015-05-22','2015-05-14','2015-05-06','2015-05-03','2015-05-12','2015-05-02','2015-05-05','2015-05-01','2015-05-23','2015-05-17','2015-05-03','2015-05-05','2015-05-04','2015-05-22','2015-05-08'],
                    'status': ['B','S','B','S','B','B','S','B','S','B','B','S','S','B','B','S']})
    tempDF['date'] = pd.to_datetime(tempDF['date'])
    

    我试过了

    tempDF.sort_values(['status']).groupby(tempDF['date']).head(2)
    

    但这最终会使条目在分组之前进行排序

    1 回复  |  直到 9 月前
        1
  •  2
  •   mozway    9 月前

    如果我理解正确,首先 sort_values 然后 grouby.head 具有 sort=False :

    (tempDF.sort_values(by=['date', 'status'], ascending=True)
           .groupby('date', sort=False).head(2)
    )
    

    输出:

        id       date status
    0   12 2015-05-01      B
    8   51 2015-05-01      S
    6   45 2015-05-02      S
    4   45 2015-05-03      B
    11  51 2015-05-03      S
    13  76 2015-05-04      B
    7   51 2015-05-05      B
    12  51 2015-05-05      S
    3   12 2015-05-06      S
    15  76 2015-05-08      S
    5   45 2015-05-12      B
    2   12 2015-05-14      B
    10  51 2015-05-17      B
    14  76 2015-05-22      B
    1   12 2015-05-22      S
    9   51 2015-05-23      B
    

    同样,如果您希望所有Bs都在所有Ss之前:

    tempDF.sort_values(by=['status', 'date'], ascending=True)
           .groupby('date', sort=False).head(2)
    )
    

    输出:

        id       date status
    0   12 2015-05-01      B
    4   45 2015-05-03      B
    13  76 2015-05-04      B
    7   51 2015-05-05      B
    5   45 2015-05-12      B
    2   12 2015-05-14      B
    10  51 2015-05-17      B
    14  76 2015-05-22      B
    9   51 2015-05-23      B
    8   51 2015-05-01      S
    6   45 2015-05-02      S
    11  51 2015-05-03      S
    12  51 2015-05-05      S
    3   12 2015-05-06      S
    15  76 2015-05-08      S
    1   12 2015-05-22      S