gpt4 book ai didi

python - 索引按日期分组并聚合的 Pandas 数据框?

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:46 25 4
gpt4 key购买 nike

我正在尝试按日期聚合 Pandas DataFrame,然后按日期对结果进行索引,但我似乎根本无法对其进行索引。

from datetime import date, datetime

import pandas as pd
import numpy as np

ts = pd.DataFrame({'data': np.random.randn(60)}, index=pd.date_range('1/1/2000', periods=60, freq='2h'))
g = ts.groupby(ts.index.date).agg(np.mean)
print(g)
data
2000-01-01 0.090038
2000-01-02 0.099970
2000-01-03 -0.619274
2000-01-04 0.027040
2000-01-05 -0.323205

首先,我希望索引是一个DatetimeIndex,但是:

print(g.index)
Index([2000-01-01, 2000-01-02, 2000-01-03, 2000-01-04, 2000-01-05], dtype='object')
g.index[0]
datetime.date(2000, 1, 1)

好的,让我们试着索引它:

g['2000-01-01']
KeyError: u'no item named 2000-01-01'

g[date(2000, 01, 01)]
KeyError: u'no item named 2000-01-01'

g[datetime(2000, 01, 01)]
KeyError: u'no item named 2000-01-01 00:00:00'

g[pd.to_datetime('2000-01-01')]
KeyError: u'no item named 2000-01-01 00:00:00'

我什至不能用索引本身索引它!

g[g.index[0]]
KeyError: u'no item named 2000-01-01'

我错过了什么?为什么对 DatetimeIndex 进行分组/聚合的结果不是 DatetimeIndex,或者至少不是 PeriodIndex?有没有办法让它成为一个?

最佳答案

索引是一个日期时间,因为您要将日期时间数组传递给 groupby:

In [11]: ts.index.date[:2]
Out[11]: array([datetime.date(2000, 1, 1), datetime.date(2000, 1, 1)], dtype=object)

一个更常用的方法是重新采样:

In [12]: res = ts.resample('D', how='mean')

In [13]: res
Out[13]:
data
2000-01-01 0.181246
2000-01-02 -0.167023
2000-01-03 -0.075843
2000-01-04 -0.218141
2000-01-05 -0.144635

或者如果您正在做更复杂的事情,您可以使用 TimeGrouper:

In [14]: ts.groupby(pd.TimeGrouper('D')).mean()
Out[14]:
data
2000-01-01 0.181246
2000-01-02 -0.167023
2000-01-03 -0.075843
2000-01-04 -0.218141
2000-01-05 -0.144635

它们有一个 DatetimeIndex 索引。

关于访问行,您应该使用 loc,但我喜欢使用时间戳访问:

In [15]: res.loc['2000-01-01']  # KeyError without using loc
Out[15]:
data 0.181246
Name: 2000-01-01 00:00:00, dtype: float64

In [16]: res.loc[pd.Timestamp('2000-01-01')]
Out[16]:
data 0.181246
Name: 2000-01-01 00:00:00, dtype: float64

您可以使用这些字符串进行切片(但我认为这不是一个 super 可靠的想法,我更喜欢使用时间戳):

In [17]: res['2000-01-01':'2000-01-01']
Out[17]:
data
2000-01-01 0.181246

关于python - 索引按日期分组并聚合的 Pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22843882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com