计算以熊猫为单位的分组依据(几列)的平均值

时间:2019-12-29 11:50:27

标签: pandas pandas-groupby

我有一个如下所示的数据框。

Unit_ID    Price           Sector    Contract_Date    Rooms
1          20              SE1       16-10-2015       2
9          40              SE1       20-10-2015       2
2          40              SE1       16-10-2016       3
2          30              SE1       16-10-2015       3
3          20              SE1       16-10-2015       3
3          10              SE1       16-10-2016       3
4          60              SE1       16-10-2016       2
5          40              SE2       16-10-2015       2
8          80              SE1       20-10-2015       2
6          80              SE2       16-10-2016       3
6          60              SE2       16-10-2015       3
7          40              SE2       16-10-2015       3
7          20              SE2       16-10-2015       3
8          120             SE2       16-10-2016       2

从上面我想准备一个数据框,如下图所示。

预期输出:

Sector       Rooms    Year         Average_Price
SE1          2        2015         30
SE1          2        2016         60
SE1          3        2015         25
SE1          3        2016         25
SE2          2        2015         60
SE2          2        2016         120
SE2          3        2015         50
SE2          3        2016         50

我认为我应该使用pandas groupby

我尝试了以下代码

df['Year'] = df.Contract_Date.dt.year
df1 = df.groupby(['Sector', 'Year', 'Rooms']).Price.mean()

1 个答案:

答案 0 :(得分:2)

使用:

( df.groupby(['Sector','Rooms',df['Contract_Date'].dt.year.rename('Year')])
    .Price
    .mean()
    .rename('Average_Price')
    .reset_index() )

  Sector  Rooms  Year  Average_Price
0    SE1      2  2015      46.666667
1    SE1      2  2016      60.000000
2    SE1      3  2015      25.000000
3    SE1      3  2016      25.000000
4    SE2      2  2015      40.000000
5    SE2      2  2016     120.000000
6    SE2      3  2015      40.000000
7    SE2      3  2016      80.000000

或使用groupby.agg

( df.groupby(['Sector','Rooms',df['Contract_Date'].dt.year.rename('Year')])
    .Price
    .agg(Average_Price = 'mean')
    .reset_index() )