如何在pandas数据框中获得特定日期/时间的所有历史值?



我想获得(a)特定白天时间的所有值。我需要这个来计算一些历史平均值/std/…根据pandas数据框架,它与日期和时间有关。我宁愿用代码来解释这个问题。假设我有这样一个数据框架:

df_datetime = pd.date_range(start='2010-01-01', end='2020-12-31', freq='30min')
df_ts = pd.DataFrame(data=np.random.random((df_datetime.shape)), index=df_datetime, columns=['Value'])
print(df_ts)
Value
2010-01-01 00:00:00  0.148690
2010-01-01 00:30:00  0.639023
2010-01-01 01:00:00  0.339820
2010-01-01 01:30:00  0.226052
2010-01-01 02:00:00  0.893710
...                       ...
2020-12-30 22:00:00  0.473275
2020-12-30 22:30:00  0.183648
2020-12-30 23:00:00  0.077264
2020-12-30 23:30:00  0.085483
2020-12-31 00:00:00  0.311474
[192817 rows x 1 columns]

现在我想要df中的所有值,比方说,这一天的时间:XXXX-12-30 22:00:00XXXX表示所有年份。我是这样做的:

df_sample = df_ts.loc[(df_ts.index.month==12) & (df_ts.index.day==30) & (df_ts.index.hour==22) & (df_ts.index.minute==0)]
print(df_sample)
Value
2010-12-30 22:00:00  0.073103
2011-12-30 22:00:00  0.525378
2012-12-30 22:00:00  0.247066
2013-12-30 22:00:00  0.192340
2014-12-30 22:00:00  0.968341
2015-12-30 22:00:00  0.458732
2016-12-30 22:00:00  0.709913
2017-12-30 22:00:00  0.706581
2018-12-30 22:00:00  0.994208
2019-12-30 22:00:00  0.172340
2020-12-30 22:00:00  0.473275

在一天的时间内工作得很好,但是我不知道一个优雅的多次执行此操作的方法(不是for循环),例如:

[`XXXX-12-30 22:00:00`, `XXXX-12-30 22:30:00`, `XXXX-12-30 23:00:00`]

您可以将索引制作成字符串,然后使用groupby进行聚合。这将为您提供由"XXXX-"等索引的答案,然后您可以获取您想要的行:

result = df_ts.groupby(df_ts.index.strftime("XXXX-%m-%d %H:%M:%S")).mean()['Value']

如果需要日期的子集,可以使用.loc:

new_range = pd.date_range(start='2021-01-01', end='2021-02-10', freq='30min', closed='left')
new_result = result.loc[new_range.strftime("XXXX-%m-%d %H:%M:%S")]

相关内容

  • 没有找到相关文章