【问题标题】:Python Pandas Group by date using datetime dataPython Pandas 使用日期时间数据按日期分组
【发布时间】:2017-01-16 22:16:34
【问题描述】:

我有一个列Date_Time,我希望在不创建新列的情况下按日期时间分组。这可能是我当前的代码不起作用。

df = pd.groupby(df,by=[df['Date_Time'].date()])

【问题讨论】:

    标签: python pandas datetime dataframe pandas-groupby


    【解决方案1】:

    您可以使用groupby by 列Date_Time by dt.date 的日期:

    df = df.groupby([df['Date_Time'].dt.date]).mean()
    

    示例:

    df = pd.DataFrame({'Date_Time': pd.date_range('10/1/2001 10:00:00', periods=3, freq='10H'),
                       'B':[4,5,6]})
    
    print (df)
       B           Date_Time
    0  4 2001-10-01 10:00:00
    1  5 2001-10-01 20:00:00
    2  6 2001-10-02 06:00:00
    
    print (df['Date_Time'].dt.date)
    0    2001-10-01
    1    2001-10-01
    2    2001-10-02
    Name: Date_Time, dtype: object
    
    df = df.groupby([df['Date_Time'].dt.date])['B'].mean()
    print(df)
    Date_Time
    2001-10-01    4.5
    2001-10-02    6.0
    Name: B, dtype: float64
    

    resample 的另一个解决方案:

    df = df.set_index('Date_Time').resample('D')['B'].mean()
    
    print(df)
    Date_Time
    2001-10-01    4.5
    2001-10-02    6.0
    Freq: D, Name: B, dtype: float64
    

    【讨论】:

      【解决方案2】:

      resample

      df.resample('D', on='Date_Time').mean()
      
                    B
      Date_Time      
      2001-10-01  4.5
      2001-10-02  6.0
      

      Grouper

      正如@JosephCottam 所建议的那样

      df.set_index('Date_Time').groupby(pd.Grouper(freq='D')).mean()
      
                    B
      Date_Time      
      2001-10-01  4.5
      2001-10-02  6.0
      

      不推荐使用TimeGrouper

      您可以将索引设置为'Date_Time'并使用pd.TimeGrouper

      df.set_index('Date_Time').groupby(pd.TimeGrouper('D')).mean().dropna()
      
                    B
      Date_Time      
      2001-10-01  4.5
      2001-10-02  6.0
      

      【讨论】:

      • 这太棒了!我如何防止它添加没有数据的日期?例如,如果我有 9/1、9/2 和 9/4 天的数据,它仍然有 9/3 和 NaN 值。
      • @GoBlue_MathMan 使用.dropna()
      • TimeGrouper 已被弃用。您能否更新您的答案以改用pd.Grouper(freq='D')
      • @JosephCottam 你去。如果这对你有用,请告诉我。
      • 这里,当按“小时”分组时,它会将源文件中不存在的小时添加为零值。
      猜你喜欢
      • 2017-01-30
      • 1970-01-01
      • 2018-05-01
      • 2020-02-06
      • 2018-09-16
      • 2023-03-09
      • 2020-10-07
      • 2013-10-27
      相关资源
      最近更新 更多