问题描述
我最近开始使用python.pivot_table,并且遇到了在数据透视表中正确使用时间戳的挑战。
我有一个大型数据框,其中包含如下数据
Date ID Days Quantity Concern
0 2012-06-29 NaN 621 NaN A
1 2012-06-29 1208985 874 1 A
2 2012-06-29 NaN 621 2 B
3 2012-06-29 NaN 874 1 C
4 2012-06-29 NaN 566 NaN A
5 2012-06-29 251254 780 NaN A
6 2012-06-29 NaN 566 NaN C
7 2012-06-29 385379 566 1 B
8 2012-06-29 967911 780 1 B
9 2012-06-29 NaN 521 NaN A
10 2012-06-29 1208985 834 1 C
11 2012-06-29 385379 374 NaN A
12 2012-06-29 967909 780 1 B
13 2012-07-18 NaN 821 NaN A
14 2012-07-18 251254 821 NaN A
15 2012-08-04 756444 676 1 C
16 2012-08-04 756444 676 2 C
17 2012-08-04 NaN 676 NaN A
18 2012-08-24 NaN 571 NaN B
19 2012-08-24 251254 446 1 B
像下面这样的行效果很好:
pd.pivot_table(data,index=['Concern'],columns=['ID'],values=['Quantity'],aggfunc='sum')
当前,当我使用Date列作为index=['Date']
它按天分组。
我希望可以按月或年分组。
当date列是TimeStamp对象时,是否可以用数据透视表实现此目的?
1楼
您可以通过datetime系列具有的.dt
属性访问诸如年和月之类的信息,因此您可以轻松地创建新列,例如:
df['Month'] = df['Date'].dt.month
然后使用这些列创建数据透视表:
pd.pivot_table(df, index=['Month'], columns=['ID'],
values=['Quantity'],aggfunc='sum')
输出:
Out[16]:
Quantity
ID 251254 385379 756444 967909 967911 1208985
Month
6 NaN 1 NaN 1 1 2
7 NaN NaN NaN NaN NaN NaN
8 1 NaN 3 NaN NaN NaN