我有一个时间索引的DataFrame看起来像这样:
>>> df
                             A
index
2019-07-13 13:01:27.100      1
2019-07-13 13:01:27.674      2
2019-07-13 13:01:28.233      4
2019-07-13 13:01:28.534      1
2019-07-13 13:01:29.005      6
2019-07-13 13:01:29.732      7
2019-07-13 13:01:35.353      1
2019-07-13 13:01:35.547      9
2019-07-13 13:01:36.125      2
2019-07-13 13:01:36.626      3
2019-07-13 13:01:37.046      4
2019-07-13 13:01:37.734      7
2019-07-13 13:01:43.156      4
2019-07-13 13:01:43.523      6
2019-07-13 13:01:44.291      2
2019-07-13 13:01:44.784      5
2019-07-13 13:01:50.046      3
2019-07-13 13:01:50.563      8
2019-07-13 13:01:51.912      5
 
我希望有一个分组,其中所包含的数据点相隔不超过5秒。例如,第一组从13:01:27.100到13:01:29.732,第二组从13:01:35.353到13:01:37.734,依此类推...
是否有针对大型数据集的快速方法?
问题来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
通常是在diff和groupby的帮助下完成的:
df['group'] = df.index.to_series().diff().gt('5sec').cumsum()
 
输出:
                         A  group
index                            
2019-07-13 13:01:27.100  1      0
2019-07-13 13:01:27.674  2      0
2019-07-13 13:01:28.233  4      0
2019-07-13 13:01:28.534  1      0
2019-07-13 13:01:29.005  6      0
2019-07-13 13:01:29.732  7      0
2019-07-13 13:01:35.353  1      1
2019-07-13 13:01:35.547  9      1
2019-07-13 13:01:36.125  2      1
2019-07-13 13:01:36.626  3      1
2019-07-13 13:01:37.046  4      1
2019-07-13 13:01:37.734  7      1
2019-07-13 13:01:43.156  4      2
2019-07-13 13:01:43.523  6      2
2019-07-13 13:01:44.291  2      2
2019-07-13 13:01:44.784  5      2
2019-07-13 13:01:50.046  3      3
2019-07-13 13:01:50.563  8      3
2019-07-13 13:01:51.912  5      3
 
回答来源:stackoverflow