以下是使用pandas pivot_table函数后以.csv格式输出的数据透视表的片段:
Sub-Product 11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12
GP Acquisitions 164 168 54 72 203 167
GP Applications 190 207 65 91 227 200
GPF Acquisitions 1124 1142 992 1053 1467 1198
GPF Applications 1391 1430 1269 1357 1855 1510
我现在唯一需要做的就是在pandas中使用groupby,在将每个Sub Product输出到.csv文件之前,按星期汇总每周的值。
以下是我想要的输出,但它是在Excel中完成的。第一列可能不完全相同,但我很好。我需要做的主要事情是按周分组,这样我就能得到按周计算的数据总和。 (查看顶行的日期如何按每7天分组一次)。希望能够使用python / pandas来做到这一点。有可能吗?
Row Labels 11/4/12 - 11/10/12 11/11/12 - 11/17/12
GP
Acquisitions 926 728
Applications 1092 889
GPF
Acquisitions 8206 6425
Applications 10527 8894
答案 0 :(得分:7)
您需要的工具是resample
,它会在一段时间/频率上隐式使用groupby,并应用像mean或sum这样的函数。
读取数据。
In [2]: df
Out[2]:
Sub-Product 11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12
GP Acquisitions 164 168 54 72 203 167
GP Applications 190 207 65 91 227 200
GPF Acquisitions 1124 1142 992 1053 1467 1198
GPF Applications 1391 1430 1269 1357 1855 1510
设置MultiIndex。
In [4]: df = df.reset_index().set_index(['index', 'Sub-Product'])
In [5]: df
Out[5]:
11/1/12 11/2/12 11/3/12 11/4/12 11/5/12 11/6/12
index Sub-Product
GP Acquisitions 164 168 54 72 203 167
Applications 190 207 65 91 227 200
GPF Acquisitions 1124 1142 992 1053 1467 1198
Applications 1391 1430 1269 1357 1855 1510
将列解析为正确的日期时间。 (它们以字符串形式出现。)
In [6]: df.columns = pd.to_datetime(df.columns)
In [7]: df
Out[7]:
2012-11-01 2012-11-02 2012-11-03 2012-11-04 \
index Sub-Product
GP Acquisitions 164 168 54 72
Applications 190 207 65 91
GPF Acquisitions 1124 1142 992 1053
Applications 1391 1430 1269 1357
2012-11-05 2012-11-06
index Sub-Product
GP Acquisitions 203 167
Applications 227 200
GPF Acquisitions 1467 1198
Applications 1855 1510
每周(axis=1
)重新取样('w'
),按周汇总。 (how='sum'
或how=np.sum
都是有效选项。)
In [10]: df.resample('w', how='sum', axis=1)
Out[10]:
2012-11-04 2012-11-11
index Sub-Product
GP Acquisitions 458 370
Applications 553 427
GPF Acquisitions 4311 2665
Applications 5447 3365