首页 > 解决方案 > 如何在执行 groupby 函数时获取列的值

问题描述

嗨,我有一个日期时间和期间高低的数据框。例如。它的 5 分钟数据称之为 df

约会时间 高的 低的
0 2020-12-02 09:15:00 590.349976 584.299988
1 2020-12-02 09:20:00 593.900024 588.750000
2 2020-12-02 09:25:00 594.900024 592.450012
3 2020-12-02 09:30:00 593.849976 591.799988
4 2020-12-02 09:35:00 594.400024 592.200012
5 2020-12-02 09:40:00 596.250000 593.099976
6 2020-12-02 09:45:00 596.849976 593.102476
7 2020-12-02 09:50:00 595.400024 592.950012
8 2020-12-02 09:55:00 596.500000 594.500000

我执行 groupby 函数将 5 分钟转换为 15 分钟并获得以下输出。

约会时间 高的 低的
0 2020-12-02 09:15:00 594.900024 584.299988
1 2020-12-02 09:30:00 596.250000 591.799988
2 2020-12-02 09:45:00 596.849976 592.950012

在执行 groupby 函数时是否有可能在以下所需输出中获得准确的高低日期时间。

约会时间 高的 低的 高日期时间 低日期时间
0 2020-12-02 09:15:00 594.900024 584.299988 2020-12-02 09:25:00 2020-12-02 09:15:00
1 2020-12-02 09:30:00 596.250000 591.799988 2020-12-02 09:40:00 2020-12-02 09:30:00
2 2020-12-02 09:45:00 596.849976 592.950012 2020-12-02 09:45:00 2020-12-02 09:50:00

标签: pythonpandasdatetime

解决方案


您可以使用包含聚合函数的字典的频率和聚合group数据帧:pd.Grouper15min

d = {'High': ('High', 'max'), 'Low': ('Low', 'min'),
     'High date': ('High', 'idxmax'), 'Low date': ('Low', 'idxmin')}

df.set_index('Datetime').groupby(pd.Grouper(freq='15min')).agg(**d)

                     High        Low        High date           Low date
Datetime                                                                           
2020-12-02 09:15:00  594.900024  584.299988 2020-12-02 09:25:00 2020-12-02 09:15:00
2020-12-02 09:30:00  596.250000  591.799988 2020-12-02 09:40:00 2020-12-02 09:30:00
2020-12-02 09:45:00  596.849976  592.950012 2020-12-02 09:45:00 2020-12-02 09:50:00

推荐阅读