Pandas 按年份和其他列分组,并根据具体情况计算平均值

Pandas 按年份和其他列分组,并根据具体情况计算平均值,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个如下所示的数据框 Tenancy_ID Unit_ID End_Date Rental_value 1 A 2012-04-26 10 2 A 2012-08-27 20 3 A 2013-04-27 50 4

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

Tenancy_ID      Unit_ID             End_Date       Rental_value
1               A                   2012-04-26     10
2               A                   2012-08-27     20
3               A                   2013-04-27     50
4               A                   2014-04-27     40
1               B                   2011-06-26     10
2               B                   2011-09-27     30
3               B                   2013-04-27     60
4               B                   2015-04-27     80
从上面我想准备下面的数据框架

预期产出:

Unit_ID   Avg_2011   Avg_2012  Avg_2013  Avg_2014   Avg_2015
A         NaN            15        50        40         NaN
B         20             NaN       60        NaN        80
步骤:

  • 单位ID=A,2012年有两份合同,租金值分别为10和20,因此平均值为15

  • 2012年平均租金=2012年的平均租金价值

直接与



您可以按、上次更改列名和上次数据清理聚合平均值和重塑形状-使用:


这回答了你的问题吗?这与默认答案相同。是否可以同时接受这两个答案?如果是,那怎么办?请引导me@ALI不,到目前为止,这是不可能的:)
#df['End_Date']=pd.to_datetime(df['End_Date']) if dtype of End_Date is not datetime

final = (df.pivot_table('Rental_value','Unit_ID',df['End_Date'].dt.year)
        .add_prefix('Avg_').reset_index().rename_axis(None,axis=1))
print(final)

  Unit_ID  Avg_2011  Avg_2012  Avg_2013  Avg_2014  Avg_2015
0       A       NaN      15.0      50.0      40.0       NaN
1       B      20.0       NaN      60.0       NaN      80.0
df1 = (df.groupby(['Unit_ID', df['End_Date'].dt.year])['Rental_value']
         .mean()
         .unstack()
         .add_prefix('Avg_')
         .reset_index()
         .rename_axis(None, axis=1))
print (df1)
  Unit_ID  Avg_2011  Avg_2012  Avg_2013  Avg_2014  Avg_2015
0       A       NaN      15.0      50.0      40.0       NaN
1       B      20.0       NaN      60.0       NaN      80.0