【问题标题】:Pandas (Python) - Segment Data into TimeframesPandas (Python) - 将数据分割成时间范围
【发布时间】:2017-06-05 17:02:36
【问题描述】:

我有一个 DateTime(索引)的数据框和一个用电量的样本:

DateTime          Usage
01-Jan-17 12am    10
01-Jan-17 3am     5
01-Jan-17 6am     15
01-Jan-17 9am     40
01-Jan-17 12pm    60
01-Jan-17 3pm     62
01-Jan-17 6pm     45
01-Jan-17 9pm     18
02-Jan-17 12am    11
02-Jan-17 3am     4
02-Jan-17 6am     17
02-Jan-17 9am     37
02-Jan-17 12pm    64
02-Jan-17 3pm     68
02-Jan-17 6pm     41
02-Jan-17 9pm     16

实际上,这个系列要长得多。我正在尝试比较每天的时间段,以便我可以查看时间序列的每日季节性。熊猫有没有办法分割数据,以便您可以比较这些时间序列?我想生成的 DataFrame 看起来像:

Time    1-Jan   2-Jan
12am    10      11
3am     5       4
6am     15      17
9am     40      37
12pm    60      64
3pm     62      68
6pm     45      41
9pm     18      16

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    假设您有DateTime 作为str 数据类型,您可以将其拆分为DateTime,然后对其进行旋转:

    df[['Date', 'Time']] = df.DateTime.str.split(" ", expand=True)
    df1 = df.pivot("Time", "Date", "Usage").reset_index()
    


    如何对Time 列进行排序?实际上并不是那么直接,为此,我们需要从时间、小时、PM/AM 指标以及如果小时为 12 中提取一些列,因为 12 应该放在所有其他小时之上:

    # use regex to extract Hour (numeric part of Time) and AM/PM indicator
    hourInd = df1.Time.str.extract("(?P<Hour>\d+)(?P<Ind>[pa]m)", expand=True)
    
    # convert the hour column to integer and create another column to check if hour is 12
    # then sort by AM/PM indicator, IsTwelve and Hour and get the index to reorder the original 
    # data frame
    df1.loc[(hourInd.assign(Hour = hourInd.Hour.astype(int), IsTwelve = hourInd.Hour != "12")
             .sort_values(["Ind", "IsTwelve", "Hour"]).index)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 2012-10-19
      • 2016-01-11
      • 2021-03-11
      相关资源
      最近更新 更多