繁体   English   中英

Pandas:创建具有两个非重复匹配的数据框

[英]Pandas: Creating data frames with non-repeating matches of two

假设以下简单 dataframe:

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)

假设以下简单的 dataframe:

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中添加新条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM