python - 在 groupby Pandas 中获得连胜
问题描述
我正在寻找一种计算组条纹的方法。对于每个组,如果之前的“结果”与当前的“结果”相同,则这两个结果将相加。如果先前的“结果”与当前的“结果”不同,或者如果没有先前的结果,那么它应该返回当前结果。
任何帮助表示赞赏
df_input = pd.DataFrame()
df_input['Name'] = ['A','B','A','A','C','C','B','A','B','C']
df_input['Result'] = [1,1,-1,-1,1,1,-1,1,-1,1]
df_output = pd.DataFrame()
df_output['Name'] = ['A','B','A','A','C','C','B','A','B','C']
df_output['Result'] = [1,1,-1,-1,1,1,-1,1,-1,1]
df_output['Streak'] = [1,1,-1,-2,1,2,-1,1,-2,3]
解决方案
首先创建一个组变量,为 each 中的每个连续相同值块分配一个组Name
:
g = df.Result.groupby(df.Name).transform(lambda x: x.diff().ne(0).cumsum())
g
0 1
1 1
2 2
3 2
4 1
5 1
6 2
7 3
8 2
9 1
Name: Result, dtype: int32
cumsum
根据Name
和 组变量计算:
df['Streak'] = df.Result.groupby([df.Name, g]).cumsum()
df
Name Result Streak
0 A 1 1
1 B 1 1
2 A -1 -1
3 A -1 -2
4 C 1 1
5 C 1 2
6 B -1 -1
7 A 1 1
8 B -1 -2
9 C 1 3
推荐阅读
- python - 将 Azure Blob 存储中的新 CSV 加载到 SQL DB
- python - 这个弃用警告是什么意思,以及如何解决它?
- python - 我应该在这个 common.Model() 中输入什么
- javascript - 在 JavaScript 中连接两个对象数组
- ios - Swift,如何在与后端 SignalR 集线器的 Web 套接字连接中指定用户
- python - 打开一个csv文件,删除名称中包含单词的列,保存在一个新的csv中 Pandas,Python
- google-apps-script - 如何使用 Google 幻灯片更改 Google Apps 脚本中幻灯片的背景颜色
- sublimetext3 - 如何自动添加新行并缩进崇高文本中的反引号?
- extjs - 隐藏列时的小部件列错误
- python-3.x - 如何在 Wagtail 中为页面模型编写自定义视图?