【问题标题】:Pandas: How to extract rows which are just within a time duration?Pandas:如何提取仅在一段时间内的行?
【发布时间】:2016-10-10 21:36:13
【问题描述】:

我有一个这样的数据框。

                       value  estimated  \
dttm_timezone                                                             
2011-12-31 20:10:00  10.7891          0   
2011-12-31 20:15:00  11.2060          0   
2011-12-31 20:20:00  19.9975          0   
2011-12-31 20:25:00  15.9975          0   
2011-12-31 20:30:00  10.9975          0   
2011-12-31 20:35:00  13.9975          0   
2011-12-31 20:40:00  15.9975          0   
2011-12-31 20:45:00  11.7891          0   
2011-12-31 20:50:00  10.9975          0   
2011-12-31 20:55:00  10.3933          0   

通过使用 dttm_timezone 列信息,我想提取仅在 dayweek 或 a

我有1年的数据,所以如果我选择天作为持续时间,我应该单独提取365天的数据,如果我选择月份,我应该单独提取12个月的数据。

我怎样才能做到这一点?

【问题讨论】:

  • /@Haggar 你试过什么?
  • 您能否更具体地“提取一天内的所有行”您的意思是您想指定一天并取出当天发生的所有行?或者你的意思是你想重新索引数据,使其频率为每日?在后一种情况下,您希望如何聚合这些值?取最大值?均值?等等
  • @MerIin:我知道样本每5分钟收集一次,所以我计算了一天和一个月需要多少行。我担心如果采样时间发生变化,那么它将不起作用,所以我只是想知道是否有任何方法可以使用 pandas 函数来做到这一点。我正在考虑使用重新采样。
  • @michael_j_ward,我的意思是,我想提取每天的样本进行分析。当我分析完一天的数据后,我想提取第二天的数据,以此类推,持续 365/366 天。
  • 我可以使用 between_time 吗?我在看

标签: python datetime pandas time-series


【解决方案1】:

让我们使用

import pandas as pd
import numpy as np

tidx = pd.date_range('2010-01-01', '2014-12-31', freq='H', name='dtime')

np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(len(tidx)), tidx, ['value'])

您可以像这样限制'2010'

df['2010']

或者

df[df.index.year == 2010]

您可以通过以下方式限制特定月份:

df['2010-04']

或所有四月:

df[df.index.month == 4]

您可以限制为特定日期:

df['2010-04-28']

所有下午 1:00:

df[df.index.hour == 13]

日期范围:

df['2011':'2013']

df['2011-01-01':'2013-06-30']

有很多方法可以做到这一点:

df.loc[(df.index.month == 11) & (df.index.hour == 22)]

链接 ---> The list can go on and on. Please read the docs

【讨论】:

  • @jezrael 这次更快了。你是最快的。
猜你喜欢
  • 2022-07-21
  • 2020-06-27
  • 1970-01-01
  • 2022-01-22
  • 2020-11-20
  • 2021-09-22
  • 1970-01-01
  • 2020-12-19
  • 2018-05-07
相关资源
最近更新 更多