python - 使用 groupby 和 loc 建立一个新的数据框
问题描述
我有一个 DataFrame 如下:
df = pd.DataFrame()
df['Team1'] = ['A','B','C','D','E','F','A','B','C','D','E','F']
df['Score1'] = [1,2,3,1,2,4,1,2,3,1,2,4]
df['Team2'] = ['U','V','W','X','Y','Z','U','V','W','X','Y','Z']
df['Score2'] = [2,1,2,2,3,3,2,1,2,2,3,3]
df['Match'] = df['Team1'] + ' Vs '+ df['Team2']
df['Match_no']= [1,2,3,4,5,6,1,2,3,4,5,6]
df['model'] = ['ELO','ELO','ELO','ELO','ELO','ELO','xG','xG','xG','xG','xG','xG']
winner = df.Score1>df.Score2
df['winner'] = np.where(winner,df['Team1'],df['Team2'])
我想做的是为下一阶段的锦标赛创建另一个日期框架。在下一阶段,我们将为每个模型(ELO 和 xG)进行 3 场比赛。我想按模型分组。这些比赛按模型分组,第 1 场和第 1 场比赛的获胜者,第 3 场比赛的获胜者对第 4 场比赛的获胜者等将进行比赛(即 U 对 B,C 对 X,Y 对 F)。那么谁能告诉我如何提取这些团队?
我预期的新数据框如下:
df1 =pd.DataFrame()
df1['Team1'] = ['U','C','Y','U','C','Y']
df1['Team2'] = ['B','X','F','B','X','F']
df1['Match'] = df1['Team1'] + ' Vs '+ df1['Team2']
df1['Match_no']= [1,2,3,1,2,3]
df1['model'] = ['ELO','ELO','ELO','xG','xG','xG']
我该如何设置?
解决方案
您可以使用GroupBy.cumcount
每组计数:
df1 = pd.DataFrame()
df1['Team1'] = df.loc[::2, 'winner'].values
df1['Team2'] = df.loc[1::2, 'winner'].values
df1['Match'] = df1['Team1'] + ' Vs '+ df1['Team2']
model = df.loc[::2, 'model'].values
df1['Match_no'] = df1.groupby(model).cumcount() + 1
df1['model'] = model
print (df1)
Team1 Team2 Match Match_no model
0 U B U Vs B 1 ELO
1 C X C Vs X 2 ELO
2 Y F Y Vs F 3 ELO
3 U B U Vs B 1 xG
4 C X C Vs X 2 xG
5 Y F Y Vs F 3 xG
推荐阅读
- html - 菜单链接跨度出现 2 倍,只是希望它出现 1 倍?
- flutter - 当我将小部件放入 TabBarView 的子项时,它显示白屏
- javascript - 在接触点画一个圆
- c++ - Arduino双CAN总线消息重发
- asp.net-mvc - 我想知道如何使用 @Htmlhelper 将值传递给控制器,同时使用 Bootstrap 框架设计我的按钮
- android - 单击列表视图项的按钮时如何获取列表视图项的值
- machine-learning - 在 Weka 中训练多层感知器
- shopify - 黎明中的 Shopify 购物车 API 捆绑部分呈现
- python - jupyter notebook pyspark 中的 Py4JJavaError
- java - 程序似乎跳过了 while 循环的第一次迭代