【发布时间】:2018-05-02 15:45:52
【问题描述】:
我在以下数据框中的目标是计算给定月份在特定位置售出的汽车数量。您会注意到数据透视结果是正确的,但列(日期)不一致。不一致的原因是因为我将月份汇总为一个字符串(如果汽车在 10 月 9 日和 10 月 10 日售出,那么我将 2 算作 10 月)。
问题:我应该如何设计应用的 get_date,这样数据透视表才能正确排序日期?或者,有没有更好的方法来解决这个问题以获得预期的结果。
表格
数据透视表结果:
数据框:
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"])})
apply date_str_date(按月汇总):
def get_date_str(row):
doi = row["SALE_DATE"]
doi_str = "".join(doi.strftime('%B-%y'))
return doi_str
枢轴:
df.pivot_table(values="CAR", index="LOCATION", columns='SALE_DATE', aggfunc='count')
【问题讨论】:
-
试试
df.SALE_DATE = pd.to_datetime(df.SALE_DATE).dt.month,然后从那里开始。 -
如果您想要字符串中的月份名称,另请参阅this question。
-
月份,因为字符串是一个“对象”,所以它会按字母顺序排列。我会得到同样的结果。另一种方法是应用一种将所有月份调整为月初的方法(即 17 年 10 月 4 日变为 17 年 10 月 1 日),然后围绕 columbs="first_of_month" 旋转。 df.SALE_DATE = pd.to_datetime(df.SALE_DATE).dt.month 给出一个数字(9 月为 9。我也需要年份)。谢谢
-
所以首先根据月份作为数字进行旋转,排序,然后转换为字符串,不是吗?
-
好的。 (因为我对python很陌生)列将是一个字符串,不是吗?所以我必须用 df.rename(columns={0:["SEP...
标签: python pandas pivot pivot-table