【问题标题】:how to write a function to get monthly, weekly data from daily in pandas?如何编写一个函数来获取熊猫每天的每月、每周数据?
【发布时间】:2018-10-01 05:29:42
【问题描述】:

我有一个如下的数据框,我需要编写一个函数来将此数据转换为每周(周日作为周末结束日期)或每月,具体取决于输入参数:-

样本每日价格df数据:

date             price_chair     vol_glass
02-09-2018         2              6
03-09-2018         1              5
04-09-2018         3              6
05-09-2018         4              8
10-09-2018         5              10
15-09-2018         2              10
18-09-2018         2              10
01-10-2018         3              20

如果选项是每月,则取一个月的平均价格椅子和玻璃卷的总和,这些列可能会有所不同:

year_month        price_chair_avg_monthly     vol_glass_sum_monthly
2018-09            2.71                    55
2018-10            3                       20

如果选项是每周,则取一周的平均价格椅子和玻璃体积总和,这些列可能会有所不同:

date    price_chair_avg_weekly  vol_glass_sum_weekly
02/09/18    2                    6
09/09/18    2.67                 19
16/09/18    3.5                  20
23/09/18    2                    10
30/09/18        
07/10/18    3                    20

【问题讨论】:

    标签: pandas


    【解决方案1】:

    使用resampleResampler.agg 和字典来指定列和重新采样函数:

    #if first column is not index
    #df = df.set_index('date')
    
    df.index = pd.to_datetime(df.index, dayfirst=True)
    
    df1 = df.resample('MS').agg({'price_chair':'mean','vol_glass':'sum'})
    print (df1)
                price_chair  vol_glass
    date                              
    2018-09-01     2.714286         55
    2018-10-01     3.000000         20
    
    df2 = df.resample('W').agg({'price_chair':'mean','vol_glass':'sum'})
    print (df2)
                price_chair  vol_glass
    date                              
    2018-09-02     2.000000          6
    2018-09-09     2.666667         19
    2018-09-16     3.500000         20
    2018-09-23     2.000000         10
    2018-09-30          NaN          0
    2018-10-07     3.000000         20
    

    【讨论】:

    • 嗨,jezrael,再次感谢您!你知道如何选择双周以防万一吗
    • @user3222101 - 然后将W 更改为2W
    • @user3222101 - 我看到了你的新问题 - 你能从我的答案和预期的输出中添加这个代码吗?那么没有理由拒绝投票。
    • 谢谢jezrael,已经添加了,我也在努力解决。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多