создание функции для вменения математических данных python - PullRequest
0 голосов
/ 01 августа 2020

Я выполняю ряд аналогичных операций и хотел бы написать функцию, но даже не знаю, как к этому подойти. Я вычисляю значения для данных 0 для следующей серии:

  • формула 2 * значение в 2001 году - значение в 2002 году

В настоящее время я делаю это один за другим в Python:

print(full_data.loc['Croatia', 'fertile_age_pct'])
print(full_data.loc['Croatia', 'working_age_pct'])
print(full_data.loc['Croatia', 'young_age'])
print(full_data.loc['Croatia', 'old_age'])

full_data.replace(to_replace={'fertile_age_pct': {0:(2*46.420061-46.326103)}}, inplace=True)
full_data.replace(to_replace={'working_age_pct': {0:(2*67.038157-66.889212)}}, inplace=True)
full_data.replace(to_replace={'young_age': {0:(2*0.723475-0.715874)}}, inplace=True)
full_data.replace(to_replace={'old_age': {0:(2*0.692245-0.709597)}}, inplace=True)

Фрейм данных (full_data):

geo_full  year   fertile_age_pct    working_age_pct    young_age    old_age
Croatia   2000   0                  0                  0            0
Croatia   2001   46.420061          67.038157          0.723475     0.692245
Croatia   2002   46.326103          66.889212          0.715874     0.709597
Croatia   2003   46.111822          66.771187          0.706091     0.72444
Croatia   2004   45.929829          66.782133          0.694854     0.735333
Croatia   2005   45.695932          66.742514          0.686534     0.747083

1 Ответ

0 голосов
/ 01 августа 2020

Итак, вы пытаетесь заполнить 0 значений в 2000 году своей формулой. Если у вас есть какая-либо другая страна в DataFrame, это может вызвать беспорядок.

Предполагая, что год с нулями всегда является первым годом для каждой страны, попробуйте следующее:

full_data.set_index('year', inplace=True)
fixed_data = {}
for country, df in full_data.groupby('geo_full')[full_data.columns[1:]]:
    if df.iloc[0].sum() == 0:
        df.iloc[0] = df.iloc[1] * 2 - df.iloc[0]
    fixed_data[country] = df
fixed_data = pd.concat(list(fixed_data.values()), keys=fixed_data.keys(), names=['geo_full'], axis=0)
...