根据同一组中的值添加列

时间:2020-02-25 00:58:02

标签: python pandas dataframe pandas-groupby

我有一个问题,该问题是由格式化数据的方式导致的,该数据并非进行“对抗分析”的最佳方式。例如,我们每场比赛每个名字都有一条记录,我们还有他们所打过的球员的数据(每场比赛总是2条记录;思考中心与中心或篮球中pg与pg等)。

当前数据:

    uid   name  field1  field2  field3
    1     bob       35      0       49
    1     evan       4      24      29
    2     bob       39      47      26
    2     mike       6      40      49
    3     bob       48      7       7
    3     evan      18      20      11
    4     bob        3      49      41
    4     evan      25      35      23

所需的输出:

uid     name    versus  field1  field2  field3
1        bob    evan    same as above 
1        evan   bob
2         bob   mike
2        mike   bob
3         bob   evan
3        evan   bob 
4         bob   evan    
4        evan   bob 

这次重新安排/添加的目标是,现在我可以对多个游戏的一个玩家与另一个玩家进行分组分析,以找出他们在该对战中的平均表现。

2 个答案:

答案 0 :(得分:2)

由于每个游戏只有2个条目,因此您可以尝试对名称进行分组和反转。

df['versus'] = df.groupby('uid')['name'].transform(lambda x: x[::-1])

答案 1 :(得分:1)

如果仅需要其他玩家的名字,则应寻求Rohith的解决方案。您还可以使用mergequery来获取其他玩家的统计信息:

(df.merge(df, on='uid')
  .query('name_x != name_y')
)

输出

      uid  name_x      field1_x    field2_x    field3_x  name_y      field1_y    field2_y    field3_y
--  -----  --------  ----------  ----------  ----------  --------  ----------  ----------  ----------
 1      1  bob               35           0          49  evan               4          24          29
 2      1  evan               4          24          29  bob               35           0          49
 5      2  bob               39          47          26  mike               6          40          49
 6      2  mike               6          40          49  bob               39          47          26
 9      3  bob               48           7           7  evan              18          20          11
10      3  evan              18          20          11  bob               48           7           7
13      4  bob                3          49          41  evan              25          35          23
14      4  evan              25          35          23  bob                3          49          41
相关问题