python - df.groupby(.pdGrouper(freq ='D' ) ).idxmax 抛出 ValueError

标签 python pandas dataframe datetime time-series

我正在尝试按天分组并找到每天的最大值。

df.loc[df.groupby(pd.Grouper(freq='D'))['High'].idxmax()]

当我的数据帧很小,只有连续几天时,它会成功运行(我认为会出现周末/假期丢失的错误)

                          InternalSymbol    Open    High     Low   Close  
CollectionTimestamp (CST)                                                  
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3   
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4   
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0   
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1   
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7 

当我尝试合并我的整个数据集时(几年,周日至周五,不包括市场假期等)。我收到此错误..

ValueError: attempt to get argmax of an empty sequence

我假设它与我的关于 freq='D' 的代码行有关。有解决类似问题的方法吗?

这是示例数据框。请注意,我留下了 2018-09-24 数据,因此它会遇到我所指的错误,如果删除 2018-09-24 行,则 .pdGrouper(freq='D') 将起作用。

                          InternalSymbol    Open    High     Low   Close
CollectionTimestamp (CST)                                               
2018-09-17 06:00:00                 GCZ8  1202.1  1203.7  1201.5  1202.5
2018-09-17 07:00:00                 GCZ8  1202.5  1202.6  1200.8  1202.2
2018-09-17 08:00:00                 GCZ8  1202.3  1204.8  1202.1  1204.1
2018-09-17 09:00:00                 GCZ8  1204.1  1206.7  1203.4  1206.1
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3
2018-09-17 11:00:00                 GCZ8  1208.2  1209.0  1207.0  1207.8
2018-09-17 12:00:00                 GCZ8  1207.8  1207.9  1206.5  1207.3
2018-09-17 13:00:00                 GCZ8  1207.2  1207.4  1205.3  1205.9
2018-09-17 14:00:00                 GCZ8  1205.9  1206.8  1204.6  1205.6
2018-09-17 15:00:00                 GCZ8  1205.7  1206.0  1204.6  1205.2
2018-09-18 06:00:00                 GCZ8  1203.7  1204.9  1202.9  1204.7
2018-09-18 07:00:00                 GCZ8  1204.8  1207.8  1204.6  1207.0
2018-09-18 08:00:00                 GCZ8  1207.0  1207.1  1204.1  1205.7
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4
2018-09-18 10:00:00                 GCZ8  1206.3  1206.5  1202.2  1204.6
2018-09-18 11:00:00                 GCZ8  1204.7  1205.0  1203.1  1203.8
2018-09-18 12:00:00                 GCZ8  1203.8  1204.3  1202.7  1203.0
2018-09-18 13:00:00                 GCZ8  1203.0  1203.9  1201.9  1203.0
2018-09-18 14:00:00                 GCZ8  1203.0  1203.3  1201.7  1202.4
2018-09-18 15:00:00                 GCZ8  1202.3  1203.0  1201.4  1202.9
2018-09-19 06:00:00                 GCZ8  1207.3  1208.4  1207.2  1207.6
2018-09-19 07:00:00                 GCZ8  1207.6  1208.2  1206.8  1207.6
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0
2018-09-19 09:00:00                 GCZ8  1210.0  1210.1  1206.0  1207.9
2018-09-19 10:00:00                 GCZ8  1207.9  1208.9  1205.7  1208.1
2018-09-19 11:00:00                 GCZ8  1208.1  1210.8  1207.4  1208.2
2018-09-19 12:00:00                 GCZ8  1208.3  1209.5  1208.1  1208.9
2018-09-19 13:00:00                 GCZ8  1208.9  1209.0  1207.2  1207.5
2018-09-19 14:00:00                 GCZ8  1207.4  1208.9  1207.4  1208.6
2018-09-19 15:00:00                 GCZ8  1208.6  1208.7  1207.6  1208.3
2018-09-20 06:00:00                 GCZ8  1207.4  1208.3  1206.8  1207.8
2018-09-20 07:00:00                 GCZ8  1207.8  1210.4  1207.2  1210.2
2018-09-20 08:00:00                 GCZ8  1210.2  1212.5  1209.7  1211.7
2018-09-20 09:00:00                 GCZ8  1211.8  1212.4  1209.8  1211.0
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1
2018-09-20 11:00:00                 GCZ8  1209.1  1209.6  1207.6  1208.2
2018-09-20 12:00:00                 GCZ8  1208.2  1210.5  1208.0  1210.4
2018-09-20 13:00:00                 GCZ8  1210.3  1211.6  1209.5  1210.6
2018-09-20 14:00:00                 GCZ8  1210.5  1211.4  1209.6  1211.3
2018-09-20 15:00:00                 GCZ8  1211.4  1212.6  1211.2  1211.9
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7
2018-09-21 07:00:00                 GCZ8  1209.7  1210.4  1208.6  1209.1
2018-09-21 08:00:00                 GCZ8  1209.0  1209.8  1199.3  1200.1
2018-09-21 09:00:00                 GCZ8  1200.2  1202.0  1196.0  1200.8
2018-09-21 10:00:00                 GCZ8  1200.9  1205.6  1200.9  1204.3
2018-09-21 11:00:00                 GCZ8  1204.3  1204.7  1199.8  1200.6
2018-09-21 12:00:00                 GCZ8  1200.6  1203.0  1200.3  1201.7
2018-09-21 13:00:00                 GCZ8  1201.6  1203.3  1200.3  1201.3
2018-09-21 14:00:00                 GCZ8  1201.4  1201.5  1200.2  1201.5
2018-09-21 15:00:00                 GCZ8  1201.6  1203.5  1201.5  1203.3
2018-09-24 06:00:00                 GCZ8  1203.3  1204.1  1202.9  1203.0
2018-09-24 07:00:00                 GCZ8  1203.0  1204.9  1202.9  1204.2
2018-09-24 08:00:00                 GCZ8  1204.3  1205.4  1202.5  1202.6
2018-09-24 09:00:00                 GCZ8  1202.5  1208.6  1202.3  1207.1
2018-09-24 10:00:00                 GCZ8  1207.1  1208.8  1205.9  1207.8
2018-09-24 11:00:00                 GCZ8  1207.7  1208.3  1204.7  1206.1
2018-09-24 12:00:00                 GCZ8  1206.1  1206.2  1204.7  1205.6
2018-09-24 13:00:00                 GCZ8  1205.5  1205.5  1203.5  1204.2
2018-09-24 14:00:00                 GCZ8  1204.1  1204.3  1203.3  1203.8
2018-09-24 15:00:00                 GCZ8  1203.7  1204.2  1202.9  1203.3

最佳答案

尝试对现有日期进行分组。使用grouperresample将尝试用NaN来填充您丢失的天数,可以说,NaN没有最大值,因此没有与丢失的天数关联的现有索引天数:

df.loc[df.groupby(df.index.date)["High"].idxmax()]


                          InternalSymbol    Open    High     Low   Close
CollectionTimestamp (CST)                                               
2018-09-17 10:00:00                 GCZ8  1206.1  1209.7  1205.9  1208.3
2018-09-18 09:00:00                 GCZ8  1205.6  1208.2  1205.2  1206.4
2018-09-19 08:00:00                 GCZ8  1207.6  1211.0  1205.9  1210.0
2018-09-20 10:00:00                 GCZ8  1211.0  1213.2  1208.1  1209.1
2018-09-21 06:00:00                 GCZ8  1212.3  1212.7  1209.3  1209.7
2018-09-24 10:00:00                 GCZ8  1207.1  1208.8  1205.9  1207.8

关于python - df.groupby(.pdGrouper(freq ='D' ) ).idxmax 抛出 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64069575/

相关文章:

python - 如何阻止 Pandas 自动转换我的日期格式?

python - 如何对 groupby 对象中没有时间列的基于时间的列进行排序

python - 如何将数据框列值设置为 X 轴标签

python - 属性错误 : 'dict' object has no attribute 'charss'

python - 是否可以根据对单个 pandas DataFrame 列的查询跨行进行多次更新

python - 通过引用传递可变对象?

python - 将数据框从长格式转换为宽格式并动态命名列

python - Django 名称错误 : name 'model' is not defined

python - python中seek()和split()的不稳定(看似随机)行为

python - 如何根据 ID 号列表乘以列值?