Зацикливайтесь на pandas groupby и назначайте операции обратно родительскому кадру данных

#python #pandas

Вопрос:

У меня есть Month, Year, Market and Value столбцы в фрейме данных pandas. Я бы выполнил / рассчитал операцию изменения процента для каждой группы и назначил новый столбец обратно родительскому фрейму данных.

Вот макет фрейма данных:

 df = pd.DataFrame({'Market': ['LA','SF','NY','LA','SF','NY'],
                   'Month': [4, 4, 4, 5, 5, 5],
                   'Year': [2017,2017,2017,2017,2017,2017],
                   'Value': [1000,1200,1400,1200,1400,1600] })
 

Меня интересует Market, Month, Year уровень и расчет процентного изменения по сравнению с предыдущим месяцем для каждой группы.

 for name, group in df.groupby(['Market','Month','Year']):

    # Create and sort on Date column ascending
    group['Date'] = pd.to_datetime(group[['Year', 'Month']].assign(DAY=1))
    group.sort_values(by=['Date'], ascending=True)

    # Calc. percent change
    group['value_pct'] = group['Value'].pct_change(periods=1) 
 

Как мне назначить это обратно родительскому кадру данных? или вы порекомендовали бы другой способ сделать это?

Ответ №1:

IIUC, вы можете попробовать:

 df['value_pct'] = (df.sort_values(by=['Year', 'Month'])
                     .groupby('Market')
                     ['Value']
                     .pct_change()
                  )
 

Выход:

   Market  Month  Year  Value  value_pct
0     LA      4  2017   1000        NaN
1     SF      4  2017   1200        NaN
2     NY      4  2017   1400        NaN
3     LA      5  2017   1200   0.200000
4     SF      5  2017   1400   0.166667
5     NY      5  2017   1600   0.142857