假设我有这样一个数据,其中包含两个玩家一个接一个地玩游戏的条目,然后在他们都赢了或输了之后,他们得到了一个共享的分数(这的逻辑并不重要,反正数字是随机的,这只是一个描述我想要的东西的例子)
所以在参与人P1和P2博弈后,每种可能的结果都会得到分数.
游戏的逻辑并不重要,我想知道的是,我是否可以用我的初始数据框创建一个新的数据框,其中包含这4个玩家的所有独特组合.因此,如果这4个玩家都参与比赛并得到一分,那么为所有可能的组合计算一个新的分数,让我们假设他们的总分数加在一起. 示例:
Player_1 Player_2 Player_3 Player_4 Outcome_1 Outcome_2 Outcome_3 Outcome_4 Score
P1 P2 P3 P4 win win win win 72
以及其他可能的独特组合.
关键是从P1和P2都赢的组合中得到30分,从P3和P4都赢的组合中得到42分,如果这4名球员都打过球并且他们都赢了,则将它们相加来创建分数.
我可以通过生成唯一的组合等来做到这一点,但在具有更大参数的实际用例中,它太长了,导致肮脏的难以阅读的代码.我想知道的是,有没有一种方法可以只使用合并、分组、联接、agg等操作来实现这一点.
import pandas as pd
data = {
"Player_1": ["P1", "P1", "P1", "P1", "P2", "P2", "P2", "P2", "P1", "P1", "P1", "P1", "P3", "P3", "P3", "P3"],
"Player_2": ["P2", "P2", "P2", "P2", "P3", "P3", "P3", "P3", "P4", "P4", "P4", "P4", "P4", "P4", "P4", "P4"],
"Outcome_1": ["win", "win", "lose", "lose", "win", "win", "lose", "lose", "win", "win", "lose", "lose", "win", "win", "lose", "lose"],
"Outcome_2": ["win", "lose", "win", "lose", "win", "lose", "win", "lose", "win", "lose", "win", "lose", "win", "lose", "win", "lose"],
"Score": [30, 45, 12, 78, 56, 21, 67, 90, 15, 32, 68, 88, 42, 74, 8, 93]
}
df = pd.DataFrame(data)
print(df)
Player_1 Player_2 Outcome_1 Outcome_2 Score
0 P1 P2 win win 30
1 P1 P2 win lose 45
2 P1 P2 lose win 12
3 P1 P2 lose lose 78
4 P2 P3 win win 56
5 P2 P3 win lose 21
6 P2 P3 lose win 67
7 P2 P3 lose lose 90
8 P1 P4 win win 15
9 P1 P4 win lose 32
10 P1 P4 lose win 68
11 P1 P4 lose lose 88
12 P3 P4 win win 42
13 P3 P4 win lose 74
14 P3 P4 lose win 8
15 P3 P4 lose lose 93