如何转换Pandas DataFrame以制作两类堆叠柱状图
问题描述
通过以下代码得到了如下Pandas DataFrame:
plt_df = df.groupby(['Aufnahme_periode','Preisgruppe','Land']).count()
对应的DataFrame数据:
| INDEX | Aufnahme_periode | Preisgruppe | Land | Anzahl |
|---|---|---|---|---|
| 1344 | 2021-11-01 | 1 | NL | 2 |
| 1345 | 2021-12-01 | 1 | AT | 8 |
| 1346 | 2021-12-01 | 1 | BE | 1 |
| 1347 | 2021-12-01 | 1 | CH | 1 |
| 1348 | 2021-12-01 | 1 | DE | 154 |
| 1349 | 2021-12-01 | 1 | GB | 3 |
| 1350 | 2021-12-01 | 1 | JP | 1 |
| 1351 | 2021-12-01 | 1 | NL | 2 |
| 1352 | 2022-01-01 | 1 | AT | 1 |
| 1353 | 2022-01-01 | 1 | DE | 19 |
| 1354 | 2022-01-01 | 1 | IT | 1 |
| 1355 | 2022-01-01 | 2 | CH | 1 |
| 1356 | 2022-01-01 | 2 | DE | 1 |
| 1357 | 2022-02-01 | 1 | DE | 16 |
| 1358 | 2022-02-01 | 1 | FR | 1 |
| 1359 | 2022-02-01 | 2 | CH | 1 |
| 1360 | 2022-03-01 | 1 | DE | 23 |
需要转换DataFrame格式以制作两类堆叠柱状图:
- 按
Preisgruppe分组的月度堆叠图:以月份为行,组1、组2为列 - 按
Land分组的月度堆叠图:以月份为行,各个国家为列
已掌握绘图方法,仅需完成DataFrame格式转换。
解决方案
1. 转换为按Preisgruppe分组的月度统计格式
使用pivot_table聚合数据,将月份设为索引,价格组设为列,对Anzahl求和,缺失值填充为0:
preisgruppe_pivot = plt_df.pivot_table( index='Aufnahme_periode', columns='Preisgruppe', values='Anzahl', aggfunc='sum', fill_value=0 ) # 可选:重命名列让标识更清晰 preisgruppe_pivot.columns = [f'Preisgruppe_{col}' for col in preisgruppe_pivot.columns]
转换后结构示例:
| Aufnahme_periode | Preisgruppe_1 | Preisgruppe_2 |
|---|---|---|
| 2021-11-01 | 2 | 0 |
| 2021-12-01 | 170 | 0 |
| 2022-01-01 | 21 | 2 |
2. 转换为按Land分组的月度统计格式
同样用pivot_table,将月份设为索引,国家设为列,对Anzahl求和,缺失值填充为0:
land_pivot = plt_df.pivot_table( index='Aufnahme_periode', columns='Land', values='Anzahl', aggfunc='sum', fill_value=0 )
转换后结构示例:
| Aufnahme_periode | AT | BE | CH | DE | FR | GB | IT | JP | NL |
|---|---|---|---|---|---|---|---|---|---|
| 2021-11-01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
| 2021-12-01 | 8 | 1 | 1 | 154 | 0 | 3 | 0 | 1 | 2 |
内容的提问来源于stack exchange,提问作者Joan Arau
相关产品推荐
相关产品推荐

