为了账号安全,请及时绑定邮箱和手机立即绑定

按数据帧分组,按值小于一秒 - pandas

按数据帧分组,按值小于一秒 - pandas

qq_笑_17 2021-09-11 20:18:06
假设我有一个熊猫数据框,如下所示:>>> df=pd.DataFrame({'dt':pd.to_datetime(['2018-12-10 16:35:34.246','2018-12-10 16:36:34.243','2018-12-10 16:38:34.216','2018-12-10 16:42:34.123']),'value':[1,2,3,4]})>>> df                       dt  value0 2018-12-10 16:35:34.246      11 2018-12-10 16:36:34.243      22 2018-12-10 16:38:34.216      33 2018-12-10 16:42:34.123      4>>> 我想按'dt'列对这个数据框进行分组,但我想以一种方式对它进行分组,它认为小于一秒不同的值是相同的,在对那些分组后,我想'value'根据每个组总结该列,并且我希望数据帧两个保持相同的长度,因此小于一秒的差异值将都是重复值,到目前为止我尝试过:>>> df.groupby('dt',as_index=False)['value'].sum()                       dt  value0 2018-12-10 16:35:34.246      11 2018-12-10 16:36:34.243      22 2018-12-10 16:38:34.216      33 2018-12-10 16:42:34.123      4>>> 但是如您所见,数据框没有更改,因为它按等效'dt'列值进行分组。我想要的输出是:                       dt  value0 2018-12-10 16:35:34.246      31 2018-12-10 16:36:34.243      32 2018-12-10 16:38:34.216      33 2018-12-10 16:42:34.123      4
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

蛮力解决方案是取您的datetime系列和每个datetime值之间的绝对差异,然后与阈值进行比较:


# data from @StephenCowley


threshold = pd.Timedelta(seconds=1)


df['val'] = [df.loc[(df['dt'] - t).abs() < threshold, 'value'].sum()

             for t in df['dt']]


print(df)


                       dt  value  val

0 2018-12-10 16:35:34.246      1    3

1 2018-12-10 16:35:34.243      2    3

2 2018-12-10 16:38:34.216      3    3

3 2018-12-10 16:42:34.123      4    4


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信