编辑:我并不是专门研究如何完成这个特定的操作工作,我需要这种行为来实现更复杂的功能。因此,为了解决这个问题,请假设该函数进行分组并返回一个对其进行了某些操作的数据帧(但没有求和)。
假设我有一个像这样的数据框:
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 的操作,但结果并不完全是我想要的,并且文档中没有任何我注意到的内容。
最佳答案
使用GroupBy.diff
来代替怎么样?
df.assign(diff=df.groupby('page').x.diff())
page x diff
0 1 10 NaN
1 1 12 2.0
2 1 21 9.0
3 2 0 NaN
4 2 5 5.0
5 2 7 2.0
6 3 1 NaN
7 3 10 9.0
8 3 33 23.0
9 3 40 7.0
<小时/>
如果您坚持使用apply
,也可以使用group_keys=False
:
df.groupby('page', as_index=False, group_keys=False).apply(compute_diff)
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
关于python - 对 pandas 中的分组应用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490129/