【发布时间】:2014-01-16 10:32:48
【问题描述】:
我有一个使用 pandas.io.sql.read_frame 从数据库中提取的数据集,看起来像这样
Period Category Projected Actual Previous
0 2013-01 A 1214432.94 3175516.32 3001149.50
1 2013-01 B 624010.78 867729.20 866639.38
2 2013-01 C 2533443.36 2314765.87 2482210.68
3 2013-01 D 5616228.49 5672648.92 5918737.79
4 2013-01 E 492184.31 1009281.36 990499.75
5 2013-01 F 32824689.07 29610034.26 32248832.59
6 2013-01 G 94192.33 152839.03 189061.80
7 2013-01 H 1271544.89 1545591.40 1054648.58
8 2013-01 I 8273369.88 8656894.51 8691683.73
9 2013-01 J 8540953.73 8012622.14 8671895.07
10 2013-01 K 8016059.13 8530401.75 9953181.37
11 2013-01 L 1190095.56 512354.65 459954.82
12 2013-01 M 850057.11 1077172.22 1097503.89
13 2013-02 A 1227779.01 2850482.70 3070764.66
14 2013-02 B 636124.55 822016.04 866802.59
15 2013-02 C 2581194.49 2471194.78 2681301.30
16 2013-02 D 5970719.17 5179206.09 5872806.59
17 2013-02 E 477820.01 1199334.74 1330452.48
18 2013-02 F 34537100.44 29082997.97 31982248.04
19 2013-02 G 92523.45 75865.03 93782.83
...
如果我使用 D.pivot_table(rows="Category", cols="Period", aggfunc="sum") 旋转表格,我会得到一个看起来像这样的多索引数据框
<class 'pandas.core.frame.DataFrame'>
Index: 13 entries, A ...
Data columns (total 33 columns):
(Projected, 2013-01) 13 non-null values
(Projected, 2013-02) 13 non-null values
(Projected, 2013-03) 13 non-null values
(Projected, 2013-04) 13 non-null values
(Projected, 2013-05) 13 non-null values
(Projected, 2013-06) 13 non-null values
(Projected, 2013-07) 13 non-null values
(Projected, 2013-08) 13 non-null values
(Projected, 2013-09) 13 non-null values
(Projected, 2013-10) 13 non-null values
(Projected, 2013-11) 12 non-null values
(Actual, 2013-01) 13 non-null values
(Actual, 2013-02) 13 non-null values
(Actual, 2013-03) 13 non-null values
(Actual, 2013-04) 13 non-null values
(Actual, 2013-05) 13 non-null values
(Actual, 2013-06) 13 non-null values
(Actual, 2013-07) 13 non-null values
(Actual, 2013-08) 13 non-null values
(Actual, 2013-09) 13 non-null values
(Actual, 2013-10) 13 non-null values
(Actual, 2013-11) 12 non-null values
(Previous, 2013-01) 13 non-null values
(Previous, 2013-02) 13 non-null values
(Previous, 2013-03) 13 non-null values
(Previous, 2013-04) 13 non-null values
(Previous, 2013-05) 13 non-null values
(Previous, 2013-06) 13 non-null values
(Previous, 2013-07) 13 non-null values
(Previous, 2013-08) 13 non-null values
(Previous, 2013-09) 13 non-null values
(Previous, 2013-10) 13 non-null values
(Previous, 2013-11) 12 non-null values
dtypes: float64(33)
但我不希望列上的分层索引。相反,我希望将非枢轴列(Projected、Actual 和 Previous)作为三元组(即系列)形式的值,因此最终表看起来像这样
Period 2013-01 2013-02 2013-03 ...
Group
A Series Series Series ...
B Series Series Series ...
C Series Series Series ...
D Series Series Series ...
...
其中每个“系列”是一个由三个数字组成的 pandas 系列,分别是(预计、实际和先前)聚合值。
我查看了数据透视表中的 stack、unstack、各种组合或行、cols 和 values 参数以及 pandas.core.reshape 中的 melt 函数,但它们似乎都没有达到我想要的效果。
【问题讨论】: