Pandas:创建具有两个不重复匹配的数据帧



假设如下简单的数据框架:

df = pd.DataFrame({'name': ['John', 'Max', 'Ethan', 'Karen', 'Carl', 'Jenny']})

为了匹配整个夏天的网球伙伴,我需要创建一个或多个数据帧,其中每两个的匹配以以下方式创建:

John  Max
Max   John
Ethan Caren
Caren Ethan
Carl  Jenny
Jenny Carl
...

我们这样做是为了每个月通知每一方关于他或她的对手。匹配可以是随机的,它不必遵循给定的顺序。然而,有一个重要的标准:匹配不允许重复,它们只能发生一次。我意识到np。Roll不是最好的,因为添加新条目时会重复匹配。我认为一些东西与itertools.combinations(df, 2)和工作的css,创建唯一的id(哈希?)以前的比赛可以是它?

最好的解决方案是什么?

注意:在季节中可能会有新的条目被添加到df

假设游戏中玩家的顺序很重要(即游戏中John vs Max不同于Max vs John——就像你提供的例子中那样),这里有一种方法:

df["temp"] = 1
matches = pd.merge(df, df, on="temp").drop("temp", axis=1)
matches.columns = ["player_1", "player_2"]
matches = matches.query("player_1 != player_2").reset_index(drop=True)

另一方面,如果游戏中玩家的顺序无关紧要(即John应该只与Max玩一次),那么这应该是有效的:

df_lst = []
for i in range(len(df) - 1):
temp = df.iloc[i+1:].assign(player_2=df.iloc[i, 0])
df_lst.append(temp)
matches = pd.concat(df_lst).reset_index(drop=True)
matches.rename({"name": "player_1"}, axis=1, inplace=True)

相关内容

  • 没有找到相关文章

最新更新