У меня есть внешняя группа и внутренняя группа, и я хочу найти разницу внутри каждой внутренней группы в зависимости от внешней группы. Обычно я могу вкладывать внутреннюю группу в каждую внешнюю группу, используя groupby
, но по какой-то причине функция diff
для groupby
возвращает плоский вектор вместо вложенного массива.
df = pd.DataFrame({'inner':list('aabbccddee'),'outer':[0,0,1,1,0,0,1,1,0,0],
'value':np.random.randint(0,100,10)})
inner outer value
0 a 0 78
1 a 0 68
2 b 1 78
3 b 1 22
4 c 0 53
5 c 0 25
6 d 1 82
7 d 1 38
8 e 0 2
9 e 0 39
Если я желаю, например, sum
для внутренней группы для каждой внешней группы, я просто использую groupby
:
In [19]: df.groupby(['outer','inner']).sum()
Out[19]:
value
outer inner
0 a 146
c 78
e 41
1 b 100
d 120
Выше приведен правильный вывод, и он работает для всех других функций , за исключением diff
. Когда я использую diff
, я хочу вывод в формате, аналогичном приведенному выше, но вместо этого я получаю:
In [20]: df.groupby(['outer','inner']).diff()
Out[20]:
value
0 NaN
1 -10.0
2 NaN
3 -56.0
4 NaN
5 -28.0
6 NaN
7 -44.0
8 NaN
9 37.0
Вышеуказанное эквивалентно df.groupby(['inner']).value.diff()
, поэтому, похоже, groupby
не учитывает внешнюю группу. Я не могу найти тренировки для этого, но использование groupby
было бы более элегантным и лаконичным. Кто-нибудь знает, почему это происходит и как это можно исправить?