【发布时间】:2016-02-20 09:09:41
【问题描述】:
我有这个数据框df:
U,Datetime
01,2015-01-01 20:00:00
01,2015-02-01 20:05:00
01,2015-04-01 21:00:00
01,2015-05-01 22:00:00
01,2015-07-01 22:05:00
02,2015-08-01 20:00:00
02,2015-09-01 21:00:00
02,2014-01-01 23:00:00
02,2014-02-01 22:05:00
02,2015-01-01 20:00:00
02,2014-03-01 21:00:00
03,2015-10-01 20:00:00
03,2015-11-01 21:00:00
03,2015-12-01 23:00:00
03,2015-01-01 22:05:00
03,2015-02-01 20:00:00
03,2015-05-01 21:00:00
03,2014-01-01 20:00:00
03,2014-02-01 21:00:00
由U 和Datetime 对象制作。我想要做的是过滤 U 在月/年中至少连续出现三个的值。到目前为止,我已按U、year 和month 分组为:
m = df.groupby(['U',df.index.year,df.index.month]).size()
获得:
U
1 2015 1 1
2 1
4 1
5 1
7 1
2 2014 1 1
2 1
3 1
2015 1 1
8 1
9 1
3 2014 1 1
2 1
2015 1 1
2 1
5 1
10 1
11 1
12 1
第三列与不同月份/年份的发生有关。在这种情况下,只有02 和03 的U 值至少包含三个连续的月/年值。现在我不知道如何选择这些用户并将它们列在列表中,例如,或者只是将它们保留在原始数据框df 中并丢弃其他用户。我也试过了:
g = m.groupby(level=[0,1]).diff()
但我无法获得任何有用的信息。
【问题讨论】:
-
困难....我通过
u = m.unstack('U')开始取得一些进展。这里的诀窍是月份和年份不能包含间隙。然后((u == u.shift(-1)) & (u == u.shift(-2))).any()会告诉您哪些值连续三个月。
标签: python pandas dataframe time-series