#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