【问题标题】:Choose rows a fixed time-interval apart in Datetime-indexed pandas dataframe在 Datetime-index pandas 数据框中选择固定时间间隔的行
【发布时间】:2019-07-14 12:17:58
【问题描述】:

我有一个由 DateTime 索引的 pandas 数据帧,从小时“​​00:00:00”到小时“23:59:00”(按分钟递增,不计算秒数)。

in: df.index
out: DatetimeIndex(['2018-10-08 00:00:00', '2018-10-08 00:00:00',
           '2018-10-08 00:00:00', '2018-10-08 00:00:00',
           '2018-10-08 00:00:00', '2018-10-08 00:00:00',
           '2018-10-08 00:00:00', '2018-10-08 00:00:00',
           '2018-10-08 00:00:00', '2018-10-08 00:00:00',
           ...
           '2018-10-08 23:59:00', '2018-10-08 23:59:00',
           '2018-10-08 23:59:00', '2018-10-08 23:59:00',
           '2018-10-08 23:59:00', '2018-10-08 23:59:00',
           '2018-10-08 05:16:00', '2018-10-08 07:08:00',
           '2018-10-08 13:58:00', '2018-10-08 09:30:00'],
          dtype='datetime64[ns]', name='DateTime', length=91846, freq=None)

现在我想选择特定的间隔,比如每 1 分钟或每 1 小时,从“00:00:00”开始并检索所有连续间隔的行。

我可以用

抓取整个间隔,比如第一个小时的间隔
df.between_time("01:00:00","00:00:00")

但我希望能够

(a) 只获取相隔特定间隔的所有时间 (b) 获得所有 1 小时的间隔,而无需手动请求 24 次。如何在 between_time 命令中增加 DatetimeIndex?还有比这更好的方法吗?

【问题讨论】:

  • 为什么需要单独的数据框?为什么不使用.iloc.loc 对原始数据框进行子集化?你能把数据分组吗?
  • 我是根据有点笼统的问题回答的,但您可能有更具体的问题。发布您尝试过的内容和预期的输出会很有帮助。查看How to Ask
  • @Polkaguy6000 谢谢,我认为你的回答会是一个好方法,我会试试的。我没有足够仔细地询问这个问题,我将尝试重新定义我正在尝试做的事情并对其进行编辑以使其更清晰。

标签: python pandas loops variables


【解决方案1】:

如果您对数据框不感兴趣,我建议您使用数据框字典,例如:

import pandas as pd

dfdict={}

for i in range(0,10):
    dfdict[i]=pd.DataFrame()

print(dfdict)

如你所见,它们确实是 dfs

out[1]
{0: Empty DataFrame
Columns: []
Index: [], 1: Empty DataFrame
Columns: []
Index: [], 2: Empty DataFrame
Columns: []
Index: [], 3: Empty DataFrame
Columns: []
Index: [], 4: Empty DataFrame
Columns: []
Index: [], 5: Empty DataFrame
Columns: []
Index: [], 6: Empty DataFrame
Columns: []
Index: [], 7: Empty DataFrame
Columns: []
Index: [], 8: Empty DataFrame
Columns: []
Index: [], 9: Empty DataFrame
Columns: []
Index: []}

尽管正如其他人所建议的那样,可能有一种更实用的方法来解决您的问题(如果没有更具体的问题,很难说)

【讨论】:

    【解决方案2】:

    我会用屏蔽而不是制作新的数据框来解决这个问题。例如,您可以添加一列 df['which_one'] 并为每个子集设置不同的数字。然后您可以通过调用df[df['which_one']==x] 访问子集,其中x 是您要选择的子集。您仍然可以通过这种方式访问​​数据来执行其他条件语句以及 Pandas 必须提供的所有其他操作。

    附:还有其他方法可以更快地访问数据。我只是使用了我最喜欢的另一种方式是df[df['which_one'].eq(x)]

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多