创建一个函数来计算不同年份的中位数成本

Create a function to calculate median cost across different years

我有一个示例数据集,其中包含不同年份的 ID 和成本,如下所示:

Id 2015-04 2015-05 2015-06 2015-07 2016-04 2016-05 2016-06 2016-07 2017-04 2017-05 2017-06 2017-07 2018-04 2018-05 2018-06 2018-07
10 58500 58500 58300 57800 57500 57700 57800 57800 57800 57900 58400 59000 59500 59500 59000 58500
11 104600 104600 105700 106100 106300 107300 108000 107600 107800 108300 109200 109600 109300 108700 109000 110700
12 104900 106700 107900 107500 106100 105200 105700 106400 106700 107100 107200 107100 107500 108300 109200 110500
13 50500 49600 48900 48400 48100 48000 47700 47500 47400 47600 47800 47800 47600 47600 48100 48400
14 49800 49900 50300 50800 51100 51200 51200 51400 51600 51900 52400 52600 52300 51800 51100 50900

如何在 Python 中创建一个函数来查找属于各自 ID 的每年的平均成本?我希望函数在开始和结束年份方面是动态的,这样如果新数据来自不同年份,代码将相应地计算变化。例如,如果2019年有新数据,则结束日期将自动视为2019年而不是2018年,并分别计算其中位数。

根据上面给出的当前数据样本,结果应该如下所示:

Id 2015 2016 2017 2018
10 58400 57750 58150 59250
11 105150 107450 108750 109150
12 107100 105900 107100 108750
13 49250 47850 47700 47850
14 50100 51200 52150 51450

首先我们拆分 - 上的列名,只得到年份。然后我们根据这些年份对axis=1进行分组,取中位数:

df = df.set_index("Id")
df = df.groupby(df.columns.str.split("-").str[0], axis=1).median().reset_index()
# or get first 4 characters
# df = df.groupby(df.columns.str[:4], axis=1).median().reset_index()
   Id    2015    2016    2017    2018
0  10   58400   57750   58150   59250
1  11  105150  107450  108750  109150
2  12  107100  105900  107100  108750
3  13   49250   47850   47700   47850
4  14   50100   51200   52150   51450