如何通过DatetimeIndex对熊猫系列值进行分组?

时间:2019-04-15 10:44:33

标签: python pandas

我有以下熊猫系列:

date_time
2018-05-03 07:46:03    1.0
2018-05-03 07:47:03    1.0
2018-05-03 08:33:03    1.0
2018-05-03 08:34:03    1.0
2018-05-03 08:35:03    1.0

它具有DatetimeIndex date_time。 我需要按date_time对值进行分组并计算分组数。创建组时应使同一组中date_time之间的差异应为+/- 1-3分钟。 在上面显示的示例中,我有2个组:

第1组

2018-05-03 07:46:03    1.0
2018-05-03 07:47:03    1.0

第2组

2018-05-03 08:33:03    1.0
2018-05-03 08:34:03    1.0
2018-05-03 08:35:03    1.0

因此答案应该是2。

2 个答案:

答案 0 :(得分:1)

您可能希望尝试使用pd.Grouper,date_time必须采用datetime格式。以下时间设置为“ 3T”或3分钟。

df.groupby(pd.Grouper(key='date_time', freq='3T', axis=1)).head(1)

答案 1 :(得分:0)

不确定我是否完全理解您的问题,但是类似的方法可能会帮助您:

df = pd.DataFrame(data={"value":[1,1,1,1,1]},
                  index=[dt.datetime(2018,5,3,7,46,3), dt.datetime(2018,5,3,7,47,3), 
                         dt.datetime(2018,5,3,8,33,3), dt.datetime(2018,5,3,8,34,3),
                         dt.datetime(2018,5,3,8,35,3)])

#Groups the data into 3min (180sec) buckets by count
df.resample("180S").count()

#Filter out rows with value 0 (adding to line above)
df.resample("180S").count()["value"].where(lambda x: x > 0)

#Drop NaN values and get length of the remaining df (which should equal your number of groups, in your case 2)
df.resample("180S").count()["value"].where(lambda x: x > 0).dropna().shape[0]

希望这会有所帮助