[英]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.