df = pd.DataFrame(
{'ts':[1,2,3,4,60,61,62,63,64,150,155,156,
1,2,3,4,60,61,62,63,64,150,155,156,
1,2,3,4,60,61,62,63,64,150,155,156],
'id': [1,2,3,4,60,61,62,63,64,150,155,156,
71,72,73,74,80,81,82,83,64,160,165,166,
21,22,23,24,90,91,92,93,94,180,185,186],
'other':['x','x','x','x','x','x','x','x','x','x','x','x',
'y','y','y','y','y','y','y','y','y','y','y','y',
'z','z','z','z','z','z','z','z','z','z','z','z'],
'user':['x','x','x','x','y','x','x','x','x','x','x','x',
'y','y','y','y','x','y','y','y','y','y','y','y',
'z','z','z','z','z','z','z','z','z','z','z','z']
})
df.set_index('id', inplace=True)
df.sort_values('ts',inplace=True)
for x, g in df.groupby('user'):
# call 1
print(g.ts.diff())
# call 2
df.groupby('user').ts.diff()
Я не уверен, почему я получаю ошибку при вызове 2. Также я заметил, что когда я удаляю sort_values, вызов проходит 2 раза.
Может кто-нибудь объяснить это поведение?
Я получаю сообщение об ошибке независимо от того, вызывается сортировка или нет. В любом случае, я думаю, что вы ищете что-то вроде:
df['group_diff'] = df.ts.groupby(df.user).transform(pd.Series.diff)
>>> df.head()
other ts user group_diff
id
1 x 1 x NaN
2 x 2 x 1.0
3 x 3 x 1.0
4 x 4 x 1.0
60 x 60 y Nan
Следуя groupby
, вы выполняете transform
, который создает запись для каждой записи в каждой группе с использованием некоторой функции. Эта функция просто pd.Series.diff
.
Обратите внимание, что у вас есть Nan
в строках 0 и 4 - они соответствуют началу групп x
и y
соответственно.
но это не объясняется :(
@jezrael Спасибо, не видел - закрыт как дубликат.
Ни ответ здесь, ни связанный ответ (который был задан много лет назад относительно более ранней версии pandas) не дают объяснения, почему метод
groupby.diff()
не работает. Я все еще получаю эту ошибку на pandas 0.24.1