1 回答
TA贡献1826条经验 获得超6个赞
说明:
继续groupby将pid相同的内容分为pid不同的组。在每个组上,应用以下操作:
_ 召集diff各组。diff返回整数或NaN指示 2 个连续行之间的差异。每组的第一行没有前一行,因此diff始终返回NaN每组的第一行:
df.groupby('pid').total_sum.transform(lambda x: x.diff()
Out[120]:
0 NaN
1 -4.0
2 NaN
3 -3.0
4 -2.0
5 0.0
6 -1.0
7 NaN
8 -4.0
9 0.0
Name: total_sum, dtype: float64
_ne检查是否有任何值不是0。它返回True不0
df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0))
Out[121]:
0 True
1 True
2 True
3 True
4 True
5 False
6 True
7 True
8 True
9 False
Name: total_sum, dtype: bool
_cumsum是逐行相加的累积和。在 Python 中,True被解释为1并被False解释为0。每组的第一个总是True,因此cumsum总是从1每行开始并将其相加以获得所需的输出。
df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0).cumsum())
Out[122]:
0 1
1 2
2 1
3 2
4 3
5 3
6 4
7 1
8 2
9 2
Name: total_sum, dtype: int32
将所有命令链接到一行,如下所示:
df['pos'] = df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0).cumsum())
Out[99]:
total_sum pid pos
0 5 2 1
1 1 2 2
2 6 7 1
3 3 7 2
4 1 7 3
5 1 7 3
6 0 7 4
7 5 10 1
8 1 10 2
9 1 10 2
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报