Python根据字母排序月份而不是月份顺序

时间:2018-07-23 00:12:01

标签: python sum pivot-table

我有一个日期为date的变量。 首先,我将其转换为日期时间:

 private static void InvokeFunctionDynamically<T>(T data)
    {            

        //1. Define the delegate 
        Func<string, bool, T> genericFunction = (name, isEnabled) =>
        {
            if(isEnabled)
            {
                return data;
            }

            return default(T);
        };

        // 2. demonstrate that the delegate is retrieved at the run time as an object
        object runtimeObject = genericFunction;


        //3. Cast it directly to the delegate type
        var result =((Func<string, bool, T>) runtimeObject)("hello", true);

        Console.WriteLine($"Result {result}");
    }

输出:

df["date"]=pd.to_datetime(df["date"])

df["date"]

以此,我所有的日期数据都按升序保存,例如,以月为单位(1,2,3,4,5,6,7,8,9,10,11,12)。虽然,由于我想只将日期显示为累计金额中的月份,所以我必须将日期列转换为表格中的月份,以便按月计算累计案例(总和):

      date          enrolled
0     2018-06-10    1
1     2018-06-10
2     2018-07-11    3
3     2018-07-11    1
4     2018-07-12

df['date'] = df.date.apply(lambda x: datetime.datetime.strftime(x,'%b'))
df['date']
Ouput:
         date      enrolled
    0     Jun      1
    1     Jun      
    2     Jul      3
    3     Jul      1
    4     Jul

输出:

pvt=pd.pivot_table(df, index=['date'], value=e['enrolled'], aggfun{'enrolled':'count'})

但我想成为:

enrolled    false true
    date
    Jul 4
    Jun 1

但是此代码更改了月份的顺序,例如,将Jul放在第一个,然后放在Jun上,但是在使用此代码之前,第6个月(Jun)的所有日期首先出现,然后是7(Jul)。 问题:代码是否有变化,允许我的日期先遵守月份顺序6(六月),然后是7(七月)? 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将date设置为索引,然后根据索引对数据帧进行排序,但在此之前,请使用CategoricalIndex作为

df.index = pd.CategoricalIndex(df.index, 
                               categories=['Jan', 'Feb', 'Mar', 'Apr','May','Jun', 'Jul', 'Aug','Sep', 'Oct', 'Nov', 'Dec'], 
                               sorted=True)

添加到它;我不知道Pandas和Categorical中都有CategoricalIndex函数。您也可以使用它,请参考https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.Categorical.html#pandas.Categorical