РЕДАКТИРОВАТЬ : Я не специально изучаю, как выполнить эту конкретную операцию, мне нужно такое поведение для более сложной функции.Итак, ради вопроса, пожалуйста, сделайте вид, что функция берет группировку и возвращает фрейм данных, над которым была выполнена какая-то операция (но без суммирования).
Итак, скажем, у меня есть такой фрейм данных:
import pandas as pd
df = pd.DataFrame({
"page": [
1, 1, 1,
2, 2, 2,
3, 3, 3, 3
],
"x": [
10, 12, 21,
0, 5, 7,
1, 10, 33, 40
]
})
Я хочу вычислить различия каждого x
на соответствующей странице.
То, как я это придумал, таково:
def compute_diff(group):
return group.assign(
diff = [
*(group.x.values[1:] - group.x.values[0:len(group.x)-1]),
None
]
)
df.groupby('page').apply(compute_diff)
Теперь это работает нормально, но проблема в том, что я получаю фрейм данных с фреймами данных, то есть так:
page x diff
page
1 0 1 10 2.0
1 1 12 9.0
2 1 21 NaN
2 3 2 0 5.0
4 2 5 2.0
5 2 7 NaN
3 6 3 1 9.0
7 3 10 23.0
8 3 33 7.0
9 3 40 NaN
Обратите внимание, что мои индексы немного испорчены, как я могу очистить это и получить формат, который выглядит примерно так:
page x diff
0 1 10 2.0
1 1 12 9.0
2 1 21 NaN
3 2 0 5.0
4 2 5 2.0
5 2 7 NaN
6 3 1 9.0
7 3 10 23.0
8 3 33 7.0
9 3 40 NaN
Я пробовал несколько вещейс unstack и reset_index, но результаты не совсем то, что я хочу, и я ничего не заметил в документе.