创建一个函数来计算不同年份的中位数成本
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
我有一个示例数据集,其中包含不同年份的 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