Я хотел бы дифференцировать все столбцы во фрейме данных Pandas по переменной группировки без дифференцирования даты.Вот воспроизводимый пример:
test_df = pd.DataFrame(data = {
'date': pd.date_range(start = '2018-10-01', periods = 10),
'group': sum([np.repeat('a', 5).tolist(),
np.repeat('b', 5).tolist()], []),
'var1': [1, 3, 4, 6, 8, 10, 11, 14, 8, 10],
'var2': np.random.random(size=10)
})
Код:
test_df.groupby(['group']).diff()
не удовлетворяет предположениям, поскольку он дифференцирует столбец date
вместе с var1
и var2
.Я нашел такое решение:
var_names = ['var1', 'var2']
test_df[[('diff.' + var + '.1') for var in var_names]] = (test_df
.groupby(['group'])[var_names].diff())
test_df
date group var1 var2 diff.var1.1 diff.var2.1
0 2018-10-01 a 1 0.237615 NaN NaN
1 2018-10-02 a 3 0.652502 2.0 0.414887
2 2018-10-03 a 4 0.676830 1.0 0.024328
3 2018-10-04 a 6 0.047120 2.0 -0.629710
4 2018-10-05 a 8 0.047494 2.0 0.000374
5 2018-10-06 b 10 0.447973 NaN NaN
6 2018-10-07 b 11 0.428788 1.0 -0.019185
7 2018-10-08 b 14 0.046168 3.0 -0.382620
8 2018-10-09 b 8 0.805820 -6.0 0.759651
9 2018-10-10 b 10 0.329497 2.0 -0.476323
Есть ли способ сделать это проще (с меньшим количеством кода или с более читаемым кодом)?