Найти наибольший рост, используя Python панды? - PullRequest
4 голосов
/ 08 октября 2019

У меня есть фрейм данных с именем Growth с 4 столбцами.

State Name  Average Fare ($)_x  Average Fare ($)_y  Average Fare ($)
0   AK  599.372368  577.790640  585.944324
1   AL  548.825867  545.144447  555.939466
2   AR  496.033146  511.867026  513.761296
3   AZ  324.641818  396.895324  389.545267
4   CA  368.937971  376.723839  366.918761
5   CO  502.611572  537.206439  531.191893
6   CT  394.105453  388.772428  370.904182
7   DC  390.872738  382.326510  392.394165
8   FL  324.941100  329.728524  337.249248
9   GA  485.335737  480.606365  489.574241
10  HI  326.084793  335.547369  298.709998
11  IA  428.151682  445.625840  462.614195
12  ID  482.092567  475.822275  491.714945
13  IL  329.449503  349.938794  346.022226
14  IN  391.627917  418.945137  412.242053
15  KS  452.312058  490.024059  420.182836

Последние три столбца - это средние тарифы за каждый год в каждом штате. 2-й, 3-й, 4-й столбцы - 2017,2018,2019 год соответственно. Я хотел выяснить, в каком штате самый высокий рост тарифов с 2017 года.

Я пробовал использовать этот код, и он дает некоторые результаты, которые я не могу понять. Мне просто нужно найти штат с самым высоким ростом тарифов с 2017 года.

мой код:

growth[['Average Fare ($)_x','Average Fare ($)_y','Average Fare ($)']].pct_change()

Ответы [ 3 ]

3 голосов
/ 08 октября 2019
growth[['Average Fare ($)_x','Average Fare ($)_y','Average Fare ($)']].pct_change(axis='columns')

Это должно дать вам процентное изменение между годами.

growth['variation_percentage'] = growth[['Average Fare ($)_x','Average Fare ($)_y','Average Fare ($)']].pct_change(axis='columns').sum(axis=1)

Это должно дать вам совокупное процентное изменение.

3 голосов
/ 08 октября 2019

Вы можете сделать это

df.set_index('State_name').pct_change(periods  = 1, axis='columns').idxmax()

Измените значение periods на 2, если вы хотите рассчитать разницу между первым годом и третьим годом.

выход

Average_fare_x    NaN
Average_fare_y     AZ #state with max change between 1st & 2nd year
Average_fare       WV #state with max change between 2nd & 3rd year
2 голосов
/ 08 октября 2019

Поскольку вы говорите о колебаниях цен, общий рост / уменьшение тарифа будет колебаться с 2017 года до ваших последних доступных данных (2019). Поэтому вы можете вычислить это соотношение, а затем просто получить max(), чтобы найти строку с наибольшим ростом.

growth['variation_fare'] =  growth['Average Fare ($)'] / growth['Average Fare ($)_x']
growth = growth.sort_values(['variation_fare'],ascending=False)
print(growth.head(1))

Пример:

import pandas as pd
a = {'State':['AK','AL','AR','AZ','CA'],'2017':[100,200,300,400,500],'2018':[120,242,324,457,592],'2019':[220,393,484,593,582]}
growth = pd.DataFrame(a)
growth['2018-2017 variation'] = (growth['2018'] / growth['2017']) - 1
growth['2019-2018 variation'] = (growth['2019'] / growth['2018']) - 1
growth['total variation'] = (growth['2019'] / growth['2017']) - 1
growth = growth.sort_values(['total variation'],ascending=False)
print(growth.head(5)) #Showing top 5

Вывод:

  State  2017  2018  2019  2018-2017 variation  2019-2018 variation  total variation
0    AK   100   120   220               0.2000             0.833333         1.200000
1    AL   200   242   393               0.2100             0.623967         0.965000
2    AR   300   324   484               0.0800             0.493827         0.613333
3    AZ   400   457   593               0.1425             0.297593         0.482500
4    CA   500   592   582               0.1840            -0.016892         0.164000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...