pandas Panda,Statsbomb -根据配对条件联接行[重复]

qyzbxkaa  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

Groupby two columns ignoring order of pairs(2个答案)
Count unique combinations regardless of column order(2个答案)
昨天关门了。
我使用的 Dataframe 结构如下:

| Sender | recipient | n_pass |  other  |
--| ------ | --------- | ------ | ------- |
0 |  Emma  |    Lisa   |    1   | other_a |
1 |  Lisa  |    Emma   |    1   | other_b | 
2 |  Anna  |    Lisa   |    1   | other_c |
3 |  Lisa  |    Anna   |    1   | other_d |
4 |  Emma  |    Jade   |    1   | other_e |
5 |  Lisa  |    Jade   |    1   | other_f |
6 |  Jade  |    Lisa   |    1   | other_g |

我的目标是合并每对参与者的行,不管他们是发送者还是接收者,或者如果没有其他组合就不合并。
输出应如下所示:

| Player_1 | Player_2 | n_pass |  other  |
--| -------- | -------- | ------ | ------- |
0 |   Emma   |    Lisa  |    2   | other_a |
1 |   Anna   |    Lisa  |    2   | other_c |
2 |   Emma   |    Jade  |    1   | other_e |
3 |   Lisa   |    Jade  |    2   | other_f |

注意事项:

  • 对n_pass求和并删除剩余行就足够了,因为还有其他列不需要合并或更改
  • 为了简单起见,我在本例中使用了名称,但真实的情况是每个玩家的唯一数字ID

我正在寻找比我目前使用嵌套循环的解决方案更有效的方法。

qmb5sa22

qmb5sa221#

示例

data = [['Emma', 'Lisa', 1, 'other_a'],
        ['Lisa', 'Emma', 1, 'other_b'],
        ['Anna', 'Lisa', 1, 'other_c'],
        ['Lisa', 'Anna', 1, 'other_d'],
        ['Emma', 'Jade', 1, 'other_e'],
        ['Lisa', 'Jade', 1, 'other_f'],
        ['Jade', 'Lisa', 1, 'other_g']]
col = ['Sender', 'recipient', 'n_pass', 'other']
df = pd.DataFrame(data, columns=col)

代码

make dataframe已对发件人和收件人进行排序

df1 = df[['Sender', 'recipient']].apply(lambda x: pd.Series(x.sort_values().values), axis=1)

df1

0       1
0   Emma    Lisa
1   Emma    Lisa
2   Anna    Lisa
3   Anna    Lisa
4   Emma    Jade
5   Jade    Lisa
6   Jade    Lisa

通过df1和布尔索引来生成条件

df[~df1.duplicated()].reset_index(drop=True)

实验结果:

Sender  recipient   n_pass  other
0   Emma    Lisa        1   other_a
1   Anna    Lisa        1   other_c
2   Emma    Jade        1   other_e
3   Lisa    Jade        1   other_f

相关问题