【发布时间】:2015-10-16 19:01:23
【问题描述】:
我有一个如下所示的数据框:
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
| | cat1 - Sept | cat2 - Sept | cat3 - Sept | cat4 - Sept | cat1 - Aug | cat2 - Aug | cat3 - Aug | cat4 - Aug |
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
| 0 | 49 | 6 | 35 | 24 | 15 | 10 | 45 | 37 |
| 1 | 4 | 2 | 32 | 20 | 21 | 26 | 43 | 41 |
| 2 | 3 | 42 | 22 | 8 | 15 | 17 | 45 | 3 |
| 3 | 3 | 5 | 32 | 14 | 28 | 11 | 45 | 3 |
| 4 | 4 | 22 | 9 | 50 | 1 | 8 | 16 | 23 |
| 5 | 10 | 15 | 9 | 41 | 3 | 35 | 30 | 34 |
| 6 | 21 | 4 | 12 | 44 | 43 | 32 | 12 | 10 |
| 7 | 4 | 49 | 42 | 30 | 11 | 25 | 27 | 24 |
| 8 | 46 | 18 | 46 | 29 | 36 | 5 | 46 | 23 |
+---+-------------+-------------+-------------+-------------+------------+------------+------------+------------+
实际上,每个月都有 15 个类别。我想做的是将数据框转换为:
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
| | cat1 - Sept | % Change | cat2 - Sept | % Change | cat3 - Sept | % Change | cat4 - Sept | % Change |
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
| 0 | 49 | 227% | 6 | -40% | 35 | -22% | 24 | -35% |
| 1 | 4 | -81% | 2 | -92% | 32 | -26% | 20 | -51% |
| 2 | 3 | -80% | 42 | 147% | 22 | -51% | 8 | 167% |
| 3 | 3 | -89% | 5 | -55% | 32 | -29% | 14 | 367% |
| 4 | 4 | 300% | 22 | 175% | 9 | -44% | 50 | 117% |
| 5 | 10 | 233% | 15 | -57% | 9 | -70% | 41 | 21% |
| 6 | 21 | -51% | 4 | -88% | 12 | 0% | 44 | 340% |
| 7 | 4 | -64% | 49 | 96% | 42 | 56% | 30 | 25% |
| 8 | 46 | 28% | 18 | 260% | 46 | 0% | 29 | 26% |
+---+-------------+----------+-------------+----------+-------------+----------+-------------+----------+
这很容易做到,但需要大量代码并且非常手动:
- 对列重新排序,使每个类别都位于其各自月份的旁边
- 为所有类别创建新列以计算百分比变化
- 删除八月列
我正在寻找用于列组织的特定 pandas 函数或习语,以减少代码并提高效率。
【问题讨论】: