python透视表-列是日期,应该正确排序

python透视表-列是日期,应该正确排序,python,pandas,pivot,pivot-table,Python,Pandas,Pivot,Pivot Table,在下面的数据框架中,我的目标是计算在给定的月份,在特定的地点售出了多少辆汽车。您将注意到透视结果是正确的,但列(日期)不一致。之所以不一致,是因为我将月份聚合为一个字符串(如果一辆车是在10月9日和10日售出的,那么我将10月数为2) 问题:我应该如何设计应用的get_日期,以使透视表能够正确排序日期?或者,有没有更好的方法来解决这个问题以获得期望的结果 桌子 数据透视表结果: 数据帧: df = pd.DataFrame({"LOCATION":["USA","USA","USA","US

在下面的数据框架中,我的目标是计算在给定的月份,在特定的地点售出了多少辆汽车。您将注意到透视结果是正确的,但列(日期)不一致。之所以不一致,是因为我将月份聚合为一个字符串(如果一辆车是在10月9日和10日售出的,那么我将10月数为2)

问题:我应该如何设计应用的get_日期,以使透视表能够正确排序日期?或者,有没有更好的方法来解决这个问题以获得期望的结果

桌子

数据透视表结果:

数据帧:

df = pd.DataFrame({"LOCATION":["USA","USA","USA","USA","JAPAN","JAPAN"],"CAR":["BMW","BMW","TOYOTA","FORD","BMW","FORD"],"SALE_DATE":pd.to_datetime(["2017-10-09","2017-09-28","2017-10-09","2017-10-12","2017-09-30","2017-09-30"])})
申请日期(按月汇总):

支点:

df.pivot_table(values="CAR", index="LOCATION", columns='SALE_DATE', aggfunc='count')

您可以执行以下操作:

首先,从日期中提取月份:

df.SALE_DATE = pd.to_datetime(df.SALE_DATE).dt.month
现在,请注意:

df = df.pivot_table(values="CAR", index="LOCATION", columns='SALE_DATE', aggfunc='count').fillna(0)
按日期排序: df=df.reindex_轴(已排序(df.columns),轴=1)

将它们转换为字符串:

months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
            6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
df.columns = [months[c] for c in df.columns]
>>> df
                 Sep    Oct
LOCATION        
JAPAN            2.0    0.0
USA              1.0    3.0

尝试
df.SALE\u DATE=pd.to\u datetime(df.SALE\u DATE).dt.month
,然后从那里开始旋转。另请查看是否希望月份名称以字符串形式显示。由于字符串是一个“对象”,因此它将按字母顺序排列。我会得到同样的结果。另一种方法是应用一种方法,将所有月份调整到月初(即2017年10月4日变为2017年10月1日),然后围绕columbs=“每月第一次”旋转。df.SALE_DATE=pd.to_datetime(df.SALE_DATE)。dt.month给出一个数字(9表示9月份,我还需要年份)。Thankso首先根据月份作为数字进行透视,排序,然后转换为字符串,否?好。(因为我是python新手)列应该是字符串,不是吗?因此,我必须用df.rename(columns={0:[“SEP…”逐个定义,我们跨越了。再次感谢!
months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
            6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
df.columns = [months[c] for c in df.columns]
>>> df
                 Sep    Oct
LOCATION        
JAPAN            2.0    0.0
USA              1.0    3.0