Python:按日期分组并查找数据框内列的平均值

时间:2017-11-12 00:31:40

标签: python pandas dataframe grouping

我有一个有3列的数据框。 时间代表了不同月份的每个月的每一天。我想要做的就是得到计数'每天的价值和每月的平均值,并为每个国家/地区执行此操作。输出必须采用数据框的形式。

Curent数据:

    Time    Country Count
 2017-01-01    us   7827
 2017-01-02    us   7748
 2017-01-03    us   7653
 ..
 ..
 2017-01-30    us   5432
 2017-01-31    us   2942
 2017-01-01    us   5829
 2017-01-02    ca   9843
 2017-01-03    ca   7845
 ..
 ..
 2017-01-30    ca   8654
 2017-01-31    ca   8534

欲望输出(虚拟数据,数字不代表上面的DF):

    Time       Country   Monthly Average
 Jan 2017      us          6873
 Feb 2017      us          8875
 ..
 .. 
 Nov 2017      us          9614
 Dec 2017      us          2475
 Jan 2017      ca          1878
 Feb 2017      ca          4775
 ..
 .. 
 Nov 2017      ca          7643
 Dec 2017      ca          9441

2 个答案:

答案 0 :(得分:2)

我会像这样组织它:

df.groupby(
    [df.Time.dt.strftime('%b %Y'), 'Country']
)['Count'].mean().reset_index(name='Monthly Average')

       Time Country  Monthly Average
0  Feb 2017      ca             88.0
1  Feb 2017      us            105.0
2  Jan 2017      ca             85.0
3  Jan 2017      us             24.6
4  Mar 2017      ca             86.0
5  Mar 2017      us             54.0

如果您的'Time'列不是日期时间列,我会这样做:

df.groupby(
    [pd.to_datetime(df.Time).dt.strftime('%b %Y'), 'Country']
)['Count'].mean().reset_index(name='Monthly Average')

       Time Country  Monthly Average
0  Feb 2017      ca             88.0
1  Feb 2017      us            105.0
2  Jan 2017      ca             85.0
3  Jan 2017      us             24.6
4  Mar 2017      ca             86.0
5  Mar 2017      us             54.0

答案 1 :(得分:1)

使用pandas dt strftime创建您想要的月份列+ groupby + mean。使用此数据框:

Dated     country   num 
2017-01-01  us     12   
2017-01-02  us     12   
2017-02-02  us     134  
2017-02-03  us     76   
2017-03-30  us     54   
2017-01-31  us     29   
2017-01-01  us     58   
2017-01-02  us     12   
2017-02-02  ca     98   
2017-02-03  ca     78   
2017-03-30  ca     86   
2017-01-31  ca     85   

然后创建Month-Year列:

a['MonthYear']= a.Dated.dt.strftime('%b %Y')

然后,删除Date列并按平均值汇总:

a.drop('Dated', axis=1).groupby(['MonthYear','country']).mean().rename(columns={'num':'Averaged'}).reset_index()

MonthYear      country  Averaged
Feb 2017    ca      88.0
Feb 2017    us      105.0
Jan 2017    ca      85.0
Jan 2017    us      24.6
Mar 2017        ca      86.0
Mar 2017        us      54.0

为了以防万一,我保留了Dated专栏。

相关问题