我在以下数据框中的目标是计算特定月份在特定位置销售的汽车数量。您将注意到枢轴结果是正确的但是列(日期)不一致。它之所以不一致是因为我将这个月汇总为一个字符串(如果一辆汽车在10月9日和10月10日售出,那么我将在10月份计算为2)。
问题:我应该如何设计应用的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')
答案 0 :(得分:1)
您可以执行以下操作:
首先,从日期中提取月份:
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_axis(已排序(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