时间序列中 pandas .agg 的奇怪行为

Posted

技术标签:

【中文标题】时间序列中 pandas .agg 的奇怪行为【英文标题】:Strange behavior from pandas .agg in a time-series 【发布时间】:2022-01-13 05:50:36 【问题描述】:

我正在使用来自 yfinance 的财务数据。

import yfinance as yf
df = yf.download("AAPL", interval="5m", period="60D")

数据框如下所示:

                                 Open        High
Datetime                                         
2021-09-14 09:30:00-04:00  150.929993  151.054993
2021-09-14 09:35:00-04:00  150.279999  150.820007
2021-09-14 09:40:00-04:00  150.360001  150.619995
2021-09-14 09:45:00-04:00  150.327698  150.619995
2021-09-14 09:50:00-04:00  150.100006  150.190002
2021-12-07 15:35:00-05:00  170.274994  170.279999
2021-12-07 15:40:00-05:00  170.038101  170.250000
2021-12-07 15:45:00-05:00  170.229996  170.300003
2021-12-07 15:50:00-05:00  170.279999  170.750000
2021-12-07 15:55:00-05:00  170.699997  171.270004

我想在聚合中运行自定义 lambda 函数以及其他函数。

df.groupby(df.index.normalize()).agg("High": (lambda x: len(x)))

只是这个实验返回零作为长度。这不是常规数据帧的情况。

【问题讨论】:

【参考方案1】:

经过测试,对我来说工作正常:

import yfinance as yf
df = yf.download("AAPL", interval="5m", period="60D").iloc[[11,2000,2001,2002,203,204,205, 206]]
print (df)

df = df.groupby(df.index.normalize()).agg("High": (lambda x: len(x)))
print (df)
                           High
Datetime                       
2021-09-14 00:00:00-04:00   1.0
2021-09-16 00:00:00-04:00   4.0
2021-10-19 00:00:00-04:00   3.0

【讨论】:

从 1.3.1 更新到 1.3.4 也为我修复了它。

以上是关于时间序列中 pandas .agg 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

pandas.DataFrame.agg 不适用于 np.std?

Pandas Groupby Agg 函数不减少

pandas groupby 多列给出了奇怪的索引行为[重复]

Pandas 使用 .replace() 交换值的奇怪行为

Python & Pandas:当 Pandas 将直方图绘制到特定轴时的奇怪行为

如何纠正 Pandas 样式数据框中的奇怪行为