我正在尝试总结按烛台图的时间序列索引的数据框。数据帧每隔几秒就有一个样本,这不适合在折线图上显示较长时间。
我想在 X 分钟内进行总结,其值为 [ min,mean,max, 'start', 'end' ]
我可以得到最小值、平均值、最大值,但是如何得到“开始”和“结束”?
数据框(df)可能如下所示:
DateTime Vals
2019-04-21 00:00:32 916892
2019-04-21 00:00:42 982588
2019-04-21 00:00:52 471452
2019-04-21 00:01:02 460576
2019-04-21 00:01:12 713764
2019-04-21 00:01:02 460576
...
2019-04-21 00:01:52 780545
2019-04-21 00:02:02 674151
...
2019-04-21 00:02:52 702329
2019-04-21 00:03:02 772237
...
2019-04-21 00:03:52 676713
2019-04-21 00:04:02 640359
...
2019-04-21 00:04:52 635224
2019-04-21 00:05:02 604004
....
(数据替换为 ...
以进行精简)
到目前为止我已经完成了这个工作:
grp = df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(['min', 'mean', 'max' ])
这给了我“预期”的输出:
DateTime min mean max
2019-04-21 00:00:00 471452 790310.666667 982588
2019-04-21 00:01:00 460576 705737.500000 780545
2019-04-21 00:02:00 674151 711281.333333 772771
2019-04-21 00:03:00 653066 774984.833333 854880
2019-04-21 00:04:00 635224 655078.333333 676513
但是我也想要:
DateTime min mean max start end
2019-04-21 00:00:00 471452 790310.666667 982588 916892 471452
2019-04-21 00:01:00 460576 705737.500000 780545 460576 780545
2019-04-21 00:02:00 674151 711281.333333 772771 674151 702329
2019-04-21 00:03:00 653066 774984.833333 854880 640359 676713
2019-04-21 00:04:00 635224 655078.333333 676513 640359 635224
有方便的方法吗?
最佳答案
为“start”指定附加aggfuncs “first”
,为“end”指定“last”
:
df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(
['min', 'mean', 'max', 'first', 'last'])
min mean max first last
DateTime
2019-04-21 00:00:00 471452 790310.666667 982588 916892 471452
2019-04-21 00:01:00 460576 603865.250000 780545 460576 780545
2019-04-21 00:02:00 674151 688240.000000 702329 674151 702329
2019-04-21 00:03:00 676713 724475.000000 772237 772237 676713
2019-04-21 00:04:00 635224 637791.500000 640359 640359 635224
2019-04-21 00:05:00 604004 604004.000000 604004 604004 604004
如果要重命名输出列,请指定格式为 <(desired_name, aggfunc)>:
的元组df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(
['min', 'mean', 'max', ('start', 'first'), ('end', 'last')])
min mean max start end
DateTime
2019-04-21 00:00:00 471452 790310.666667 982588 916892 471452
2019-04-21 00:01:00 460576 603865.250000 780545 460576 780545
2019-04-21 00:02:00 674151 688240.000000 702329 674151 702329
2019-04-21 00:03:00 676713 724475.000000 772237 772237 676713
2019-04-21 00:04:00 635224 637791.500000 640359 640359 635224
2019-04-21 00:05:00 604004 604004.000000 604004 604004 604004
关于python - 如何使用 GroupBy.agg() 从 TimeSeries 数据中获取 'Start' 和 'End'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712285/