【问题标题】:Split DatetimeIndex into date and time MultiIndex conveniently in Pandas在 Pandas 中方便地将 DatetimeIndex 拆分为日期和时间 MultiIndex
【发布时间】:2014-06-26 07:54:40
【问题描述】:

假设我有这样的 DatetimeIndex:ed 数据(当然会有几天):

                             X      Y       Z
timestamp           
2013-01-02 10:00:13.295000   366    -8242   -1820
2013-01-02 10:00:13.329000   366    -8016   -1820
2013-01-02 10:00:13.352000   32     -8016   -1820
2013-01-02 10:00:13.882000   32     -9250   -1820
2013-01-02 10:00:15.076000  -302    -9250   -1820

我希望它像这样被多重索引:

                                 X      Y       Z
Date           Time     
2013-01-02     10:00:13.295000   366    -8242   -1820
               10:00:13.329000   366    -8016   -1820
               10:00:13.352000   32     -8016   -1820
               10:00:13.882000   32     -9250   -1820
               10:00:15.076000  -302    -9250   -1820

我知道您可以(可能)提取 DatetimeIndex,用 .date() 和 .time() 将其拆分为两列,并将其设置为 Dataframe 的新索引,但 是否有更多“pandaic” ' 这样做的方式?在我看来,这种功能会派上用场......

【问题讨论】:

  • 您的最终目标是什么?实际上,df.resample('D') 会这样做,但您几乎总是想计算一个归约函数
  • 基本上我想在一个循环中遍历所有日期并在每次通过时执行一些数据分析......我想保留所有数据,所以重新采样不会......
  • 好吧,看这里:pandas.pydata.org/pandas-docs/stable/…;你不需要明确划分日期和时间,那样效率很低,你也可以df.groupby(df.index.date).transform(...)
  • 是的,我实际上已经知道了,但我实际上还希望能够仅通过 number 天而不是“YYYY-MM”来选择日期分组数据-DD' 等...实际上下面的解决方案似乎也不允许这样做。我想我只需要将日期列表写成字符串并循环遍历(?)
  • 你也可以在 df.index.day 上进行分组;如果你发现自己在循环,那就是错误的方式。

标签: python pandas timestamp time-series multi-index


【解决方案1】:

我能想到的最好办法是

In [13]: df.index = pd.MultiIndex.from_arrays([df.index.date, df.index.time], names=['Date','Time'])

In [14]: df
Out[14]: 
                              X     Y     Z
Date       Time                            
2013-01-02 10:00:13.295000  366 -8242 -1820
           10:00:13.329000  366 -8016 -1820
           10:00:13.352000   32 -8016 -1820
           10:00:13.882000   32 -9250 -1820
           10:00:15.076000 -302 -9250 -1820

[5 rows x 3 columns]

【讨论】:

  • 完美!!非常感谢:)
  • 嗯,转念一想,现在索引看起来有点滑稽......无法弄清楚如何方便地获取给定日期的所有数据,例如df[0] 只会给出第一天的数据...
  • 使用df.ix[datetime.date(2013,1,2)]。您需要先按索引排序。
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2022-06-14
  • 1970-01-01
  • 2016-11-24
  • 2019-03-22
  • 2013-10-18
相关资源
最近更新 更多