【问题标题】:Pandas resampling with category variablePandas 使用类别变量重新采样
【发布时间】:2020-06-19 19:43:12
【问题描述】:

我想每小时重新采样一个数据帧并保留类别变量,我怎样才能有效地做到这一点。我通常使用df = df.resample('h').sum(),但这不适用于我的类别变量。任何想法?

date  = ['2015-02-03 23:00:00','2015-02-03 23:30:00','2015-02-04 00:00:00','2015-02-04 00:30:00']
value = [33.24  , 31.71  , 34.39  , 34.49 ]
value2 = [2*x for x in value]
value3 = [3*x for x in value]
cat = ['a','a','b','b']
df = pd.DataFrame({'value':value,'value2':value2,'value3':value3,'index':date,'category':cat})

df.index = pd.to_datetime(df['index'],format='%Y-%m-%d %H:%M')
df.drop(['index'],axis=1,inplace=True)

print(df.head())
                    value  value2  value3    category
index                                     
2015-02-03 23:00:00  33.24   66.48   99.72    a
2015-02-03 23:30:00  31.71   63.42   95.13    a
2015-02-04 00:00:00  34.39   68.78  103.17    b
2015-02-04 00:30:00  34.49   68.98  103.47    b

预期结果:

                     value  value2  value3    category
index                                     
2015-02-03 23:00:00  64.95   129.9   194.85    a
2015-02-04 00:00:00  68.88   137.76  206.64    b

【问题讨论】:

    标签: python pandas resampling


    【解决方案1】:

    使用DataFrameGroupBy.resample - 这意味着将groupbyresample 链接起来:

    df = df.groupby('category').resample('h').sum()
    print (df)
                                  value  value2  value3
    category index                                     
    a        2015-02-03 23:00:00  64.95  129.90  194.85
    b        2015-02-04 00:00:00  68.88  137.76  206.64
    

    或者可以使用Grouper:

    df = df.groupby(['category', pd.Grouper(freq='h')]).sum()
    print (df)
                                  value  value2  value3
    category index                                     
    a        2015-02-03 23:00:00  64.95  129.90  194.85
    b        2015-02-04 00:00:00  68.88  137.76  206.64
    

    【讨论】:

      【解决方案2】:

      您的 sum() 聚合对类别没有意义。您必须为分类列明确定义您想要的聚合。

      例如,如果您想选择分类的第一个值,您可以这样做:

      df = df.resample('h').apply({"value":"sum", "value2":"sum", "value3":"sum", "category":"first"})
      print(df)
      
                           value  value2  value3 category
      index                                              
      2015-02-03 23:00:00  64.95  129.90  194.85        a
      2015-02-04 00:00:00  68.88  137.76  206.64        b
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-23
        • 1970-01-01
        • 2013-06-09
        • 2013-12-06
        • 2015-11-07
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多