说我有数据框
user, organization, logintime, logouttime
a, 1, 2017-01-01 00:22:33, 2017-01-01 00:23:45
b, 2, 2017-01-01 00:28:33, 2017-01-01 00:32:45
c, 3, 2017-01-01 00:44:12, 2017-01-01 00:55:45
d, 1, 2017-01-01 00:44:33, 2017-01-01 01:23:45
...
a, 1, 2017-05-02 23:32:11, 2017-05-03 00:12:22
如何将其转换为如下所示的数据框:
organization, dataframe
a, [month 1: 32, month 2: 42, ..., month 12: 82]
b, [month 1: 22, month 2: 11, ..., month 12: 12]
...
其中每个月的值表示该月份的登录时间计数。
谢谢!
P.S。如果有人知道一种简单的方法来绘制原始数据帧并指定时间段而不必将其处理到新的数据帧中,请告诉我。
答案 0 :(得分:3)
我更愿意按如下方式返回DataFrame:
In [11]: df # important that logintime is a datetime64 column
Out[11]:
user organization logintime logouttime
0 a 1 2017-01-01 00:22:33 2017-01-01 00:23:45
1 b 2 2017-01-01 00:28:33 2017-01-01 00:32:45
2 c 3 2017-01-01 00:44:12 2017-01-01 00:55:45
3 d 1 2017-01-01 00:44:33 2017-01-01 01:23:45
4 a 1 2017-05-02 23:32:11 2017-05-03 00:12:22
In [12]: df.set_index("logintime").groupby(["user", pd.TimeGrouper("M")]).size().unstack(fill_value=0)
Out[12]:
logintime 2017-01-31 2017-05-31
user
a 1 1
b 1 0
c 1 0
d 1 0
这里的内容为“用户a在2017-01-31结束的月份中有1次登录”。
解释步骤:我们首先设置索引(以便允许具有logintime 和用户的groupby),然后设置每个索引的组大小(登录次数)用户月组。