如何将时间序列数据帧转换为binnable(因此,可绘制的)数据帧?

时间:2017-05-10 00:27:24

标签: python pandas

说我有数据框

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。如果有人知道一种简单的方法来绘制原始数据帧并指定时间段而不必将其处理到新的数据帧中,请告诉我。

1 个答案:

答案 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),然后设置每个索引的组大小(登录次数)用户月组。