在GroupBy之后根据特定列对数据框进行排序

时间:2020-10-04 04:26:17

标签: python pandas

我最初有一个称为df的数据框。我使用以下命令根据特定的标准对数据框进行了分组。

df= df.groupby([df['Date'].dt.strftime('%B'), 'Project','Name'])['Hours'].sum() 

因此,我得到了以下数据框。

**Date**   **Project**                     **Name**                          **Hours**
September  Project 1                          x                                1.00
                                              x                                3.00
           Project 2                          a                                16.00
                                              z                                4.00
           Project 3                          y                                1.00
June       Project 1                          x                                1.00
                                              x                                45.00
                                              y                                6.00
July       Project 2                          a                                16.00
                                              z                                4.00
           Project 3                          y                                1.00

现在,我正在尝试根据“日期”对该数据框进行排序。换句话说,我想要的是6月,7月和9月而不是9月,6月,7月,所以这就是我希望得到的:

**Date**   **Project**                     **Name**                          **Hours**
June       Project 1                          x                                1.00
                                              x                                45.00
                                              y                                6.00
July       Project 2                          a                                16.00
                                              z                                4.00
           Project 3                          y                                1.00
September  Project 1                          x                                1.00
                                              x                                3.00
           Project 2                          a                                16.00
                                              z                                4.00
           Project 3                          y                                1.00

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

按月汇总,然后按字典使用rename

MonthDict={ 1 : "January",
       2 : "February",
       3 : "March",
       4 : "April",
       5 : "May",
       6 : "June",
       7 : "July",
       8 : "August",
       9 : "September",
       10 : "October",
       11 : "November",
       12 : "December"
}

df= (df.groupby([df['Date'].dt.month, 'Project','Name'])['Hours'].sum()
       .rename(MonthDict, level=0))

如果日期时间是原始排序的,则可以在groupby中使用sort=False以避免排序:

df= df.groupby([df['Date'].dt.strftime('%B'), 'Project','Name'], sort=False)['Hours'].sum()