【问题标题】:Pandas cut or groupby a date range熊猫按日期范围切割或分组
【发布时间】:2016-11-30 12:07:09
【问题描述】:

我有多个带有日期列的数据框。我想将这些数据框按日期列分组 5 天。通常这样的事情是有效的:

df = pd.DataFrame([['2016-11-01 09:21:07', 10], ['2016-09-14 02:46:01', 21], ['2016-08-11 03:26:33', 14], ['2016-10-17 14:20:44', 14]], 
                columns=['DateCol', 'Values'])
df['DateCol'] = pd.to_datetime(df['DateCol'])

df.set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean()

但是,当我使用 pd.TimeGrouper 时,它会根据我应用它的数据框创建组。如果我在两个不同的数据帧上执行此操作,则会产生不同的组。 我想按相同的组对多个数据帧进行分组。

我尝试使用pd.cut,但它不适用于日期时间列。 pd.cut(df['DateCol'], 10) 给我TypeError

理想情况下,我想做这样的事情:

pd.groupby(df, pd.cut(df['DateCol'], pd.date_range(start='1/1/2016', end='1/1/2017', freq='5D')))

换句话说,我需要按特定日期范围对我的数据框进行分组。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    基本上,您需要让所有数据框共享同一组日期。因此,考虑在不同的日期数据帧上进行外部合并以保留所有列。外部合并将值保留在左右连接中,并将填充NaN 用于不在当前数据框中的相应日期。然后,运行TimeGrouper

    下面将所有数据帧保存到一个列表中,这样更容易运行完整的操作并避免全局环境中的多个对象:

    from datetime import datetime as dt
    import pandas as pd
    
    df1 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in 
                                    ['2016-11-01 09:21:07', '2016-09-14 02:46:01',
                                     '2016-08-11 03:26:33', '2016-10-17 14:20:44']], 
                        'Values': [10, 21, 14, 14]})
    
    df2 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in 
                                    ['2016-07-28 13:56:19', '2016-03-07 06:23:48',
                                     '2016-09-26 05:31:10', '2016-08-03 12:02:59']], 
                        'Values': [7, 19, 28, 36]})    
    dfs = [df1, df2]
    alldates = pd.concat([i[['DateCol']] for i in dfs]).drop_duplicates()
    
    for i in range(len(dfs)):
        dfs[i] = dfs[i].merge(alldates, on='DateCol', how='outer')    
        dfs[i] = dfs[i].set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean()
        print(dfs[i].head())
    
    #                      Values
    # DateCol                    
    # 2016-03-07 06:23:48     NaN
    # 2016-03-12 06:23:48     NaN
    # 2016-03-17 06:23:48     NaN
    # 2016-03-22 06:23:48     NaN
    # 2016-03-27 06:23:48     NaN
    #                      Values
    # DateCol                    
    # 2016-03-07 06:23:48    19.0
    # 2016-03-12 06:23:48     NaN
    # 2016-03-17 06:23:48     NaN
    # 2016-03-22 06:23:48     NaN
    # 2016-03-27 06:23:48     NaN
    

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多