Панды: как применить ряд функций к нескольким парам столбцов - PullRequest
0 голосов
/ 28 февраля 2019

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

Упрощенный пример, который я создал:

df = pd.DataFrame({2010: [100, 110, 120], 2015: [150, 155, 175], 2020: [180, 190, 200], 2025: [200, 210, 220]},
                  index = {'CityA', 'CityB', 'CityC'})
df

Beginning

После этого моя серия функций:

df['10-15'] = df[2015] - df[2010]
growth = df['10-15'].sum()
df['10-15 ratio'] = df['10-15']/growth

#Real Total growth is calculated from another dataframe
df2 = pd.DataFrame({2015: 200, 2020:210, 2025: 220}, index = ['real increase'])
df2

growth

growth2015 = df2.at['real increase', 2015]

df['New2015'] = df[2010] + growth2015*df['10-15 ratio']

В конечном итоге это даст мне желаемый результат, проекция скорректирована с использованием новейшего числа роста.

df

End

Проблема в том, что я делаю это каждый год с 2015 по 2045 год. Я знаю, что должен быть способ сделать это без копирования и вставки навсегда в Python, ноЯ просто не знаю как.Как мне добиться этого, построить словарь или функцию?

Спасибо

1 Ответ

0 голосов
/ 01 марта 2019

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

def letstry(n):
    df[str(n-5)+ '-' +str(n)] = df[n] - df[n-5]
    growth = df[str(n-5)+ '-' +str(n)].sum()
    df[str(n-5)+ '-' +str(n)+ 'ratio']  = df[str(n-5)+ '-' +str(n)]/growth
    realg = df2.at['real increase', n]
    df['New' + str(n)] = df[n-5] + realg*df[str(n-5)+ '-' +str(n)+ 'ratio']
    return df

for i in range(2010, 2050, 50):
    letstry(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...