python - Pandas cumsum 按唯一两列
问题描述
我正在使用 python,我想根据如下所示的结果表计算两个团队的总目标:
我将欲望输出放在列(cumsumlocal 和 cumsumVisitor)中以便更好地解释,我想按赛季和比赛对每个球队的目标进行累计,注意,有两个不同的赛季。因此,每个季节的 cumsum 必须是独一无二的。
Seasson Match Local Visitor GoalLocal goalVisitor _-->cumsumLocal cumsumVisitor
-----------------------------------------------------------------------------------------
1 1 Machester Blackburn 2 1 _----> 2 1
1 1 Leeds arsenal 2 4 _----> 2 4
1 2 Blackburn Leeds 1 3 _----> 3 5
1 2 Arsenal Manchester 2 0 _----> 6 2
1 3 Leeds Manchester 6 1 _----> 11 3
1 3 Arsenal Blackburn 5 0 _---->
2 1 Machester Blackburn 3 1 _---->
2 1 Leeds arsenal 2 0 _---->
2 2 Blackburn Leeds 2 4 _---->
2 2 Arsenal Manchester 1 3 _---->
2 3 Leeds Manchester 2 0 _---->
2 3 Arsenal Blackburn 6 1 _---->
解决方案
我相信你需要 - 首先预处理添加_
到列名:
d = {'Local':'Team_Local','Visitor':'Team_Visitor',
'GoalLocal':'Goal_Local','goalVisitor':'Goal_Visitor'}
df = df.rename(columns=d)
print (df)
Seasson Match Team_Local Team_Visitor Goal_Local Goal_Visitor
0 1 1 Manchester Blackburn 2 1
1 1 1 Leeds Arsenal 2 4
2 1 2 Blackburn Leeds 1 3
3 1 2 Arsenal Manchester 2 0
4 1 3 Leeds Manchester 6 1
5 1 3 Arsenal Blackburn 5 0
6 2 1 Manchester Blackburn 3 1
7 2 1 Leeds Arsenal 2 0
8 2 2 Blackburn Leeds 2 4
9 2 2 Arsenal Manchester 1 3
10 2 3 Leeds Manchester 2 0
11 2 3 Arsenal Blackburn 6 1
创建MultiIndex
,split
然后重塑stack
并创建新列groupby=+cumsum
,最后重塑unstack
:
df = df.set_index(['Seasson','Match'], append=True)
df.columns = df.columns.str.split('_', expand=True)
df = df.stack()
#pandas 0.24+
df['Cum'] = df.groupby(['Seasson','Team'])['Goal'].cumsum()
#pandas lower
#df['Cum'] = df.reset_index().groupby(['Seasson','Team'])['Goal'].cumsum().values
df = df.unstack().reindex(['Team','Goal','Cum'], axis=1, level=0)
df.columns = df.columns.map('_'.join)
df = df.reset_index(level=0, drop=True).reset_index()
print (df)
Seasson Match Team_Local Team_Visitor Goal_Local Goal_Visitor \
0 1 1 Manchester Blackburn 2 1
1 1 1 Leeds Arsenal 2 4
2 1 2 Blackburn Leeds 1 3
3 1 2 Arsenal Manchester 2 0
4 1 3 Leeds Manchester 6 1
5 1 3 Arsenal Blackburn 5 0
6 2 1 Manchester Blackburn 3 1
7 2 1 Leeds Arsenal 2 0
8 2 2 Blackburn Leeds 2 4
9 2 2 Arsenal Manchester 1 3
10 2 3 Leeds Manchester 2 0
11 2 3 Arsenal Blackburn 6 1
Cum_Local Cum_Visitor
0 2 1
1 2 4
2 2 5
3 6 2
4 11 3
5 11 2
6 3 1
7 2 0
8 3 6
9 1 6
10 8 6
11 7 4
推荐阅读
- reactjs - 如何使用 konva react 将圆圈制作成表格
- android - kotlin/android 工作室中的“R”是什么?
- c# - 无法跟踪实体类型“”的实例,因为已在跟踪另一个具有键值“”的实例
- python - Python - 如何正确保存excel文件
- node.js - 设置了带有 OpenID 的 OAuth2.0 授权代码流,何时以及如何访问我的 SQL Server 以检索特定于该用户的数据?
- kotlin - `Unit = Unit` 在 Kotlin 中的作用和含义是什么?
- javascript - 循环遍历两个带有布尔条件的 JSON 数组 [Angular 10]
- quic - HTTP/3 QPACK 中重复编码器指令的目的是什么?
- python - 有人知道 Mac 上 Python IDLE 的默认字体吗?
- javascript - 如何将一个集合添加到云 Firestore 中的另一个集合?