【发布时间】:2023-04-05 11:19:01
【问题描述】:
我在这里看到了其他 cmets,了解当 pivot() 将日期设为列名时如何正确地对列进行排序。我没有看到的是如何在排序后将这些日期转换为我想要的格式。
这是我的例子。我的数据如下所示:
category | date | value1 | value2 |
---|---|---|---|
a | 12/1/2018 | 1 | 25 |
a | 1/1/2019 | 2 | 26 |
a | 2/1/2019 | 3 | 27 |
b | 12/1/2018 | 4 | 28 |
b | 1/1/2019 | 5 | 29 |
b | 2/1/2019 | 6 | 30 |
c | 12/1/2018 | 7 | 31 |
c | 1/1/2019 | 8 | 32 |
c | 2/1/2019 | 9 | 33 |
我想要的是这样的:
category | value | Dec-18 | Jan-19 | Feb-19 |
---|---|---|---|---|
a | value1 | 1 | 2 | 3 |
a | value2 | 25 | 26 | 27 |
b | value1 | 4 | 5 | 6 |
b | value2 | 28 | 29 | 30 |
c | value1 | 7 | 8 | 9 |
c | value2 | 31 | 32 | 33 |
我已经想出了如何让枢轴一次执行一个值,并且只要我不尝试格式化日期,就可以对日期进行排序。但是 pivot 正在将这些日期转换为文本,所以我不能再更改格式了。
这是我目前所拥有的:
#df['date'] = pd.to_datetime(df.date).dt.strftime('%b-%y')
final = df.pivot(index='category', columns='date', values='value1')
如果我先进行日期格式化,则排序不正确。我也尝试过 pivot_table,但它不允许我设置 aggfunc=None。
日期格式必须是动态的,也就是每个月的日期范围都会不同(过去 12 个月),所以我不想硬编码日期。
谢谢!
【问题讨论】:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:以日期为列名的 Python Pandas Pivot() 需要排序和格式化 - Python技术站