Pandas 中键不相等的地方加入

Mat*_*owe 3 python dataframe pandas

我有一个像这样的数据框:

data = {'teamid': [1, 2, 3, 4], 'gameid': [1, 1, 2, 2], 'rebounds': [20, 35, 43, 15]}
game_df = pd.DataFrame(data=data)
print(game_df)

   teamid  gameid  rebounds
0       1       1        20
1       2       1        35
2       3       2        43
3       4       2        15
Run Code Online (Sandbox Code Playgroud)

我想将它加入到它自身中以生成如下数据框:

wanted_data = {'teamid': [1, 2, 3, 4], 'gameid': [1, 1, 2, 2], 'rebounds': [20, 35, 43, 15],
               'teamid_opponent': [2, 1, 4, 3], 'rebound_opponent': [35, 20, 15, 43]}
wanted_df = pd.DataFrame(data=wanted_data)
print(wanted_df)

   teamid  gameid  rebounds  teamid_opponent  rebound_opponent
0       1       1        20                2                35
1       2       1        35                1                20
2       3       2        43                4                15
3       4       2        15                3                43
Run Code Online (Sandbox Code Playgroud)

在 SQL 中我会做这样的事情:

SELECT * from game_df df1 join game_df df2 on df1.gameid = df2.gameid and df1.teamid != df2.teamid
Run Code Online (Sandbox Code Playgroud)

但我无法在 pandas 文档或此处找到任何在 pandas 本身中复制此内容的方法。我在这里查看并找到了此链接,但它与我想要做的不太一样。我只找到了尝试在键相等的情况下加入的示例。

WeN*_*Ben 5

Here is one way use merge

Yourdf=game_df.merge(game_df,on='gameid',suffixes =['','_opponent']).query('teamid!=teamid_opponent')
Out[42]: 
   teamid  gameid  rebounds  teamid_opponent  rebounds_opponent
1       1       1        20                2                 35
2       2       1        35                1                 20
5       3       2        43                4                 15
6       4       2        15                3                 43
Run Code Online (Sandbox Code Playgroud)