Pandas Dataframe根据其他列的计数添加列

时间:2015-10-06 09:22:57

标签: python pandas dataframe

我有以下包含体育比赛信息的pandas数据框:

tournament    playerA    playerB
1             A          B 
1             C          B
1             D          A
2             A          B
2             A          C
2             A          D

我现在想要添加一个新列(或创建一个新的数据框;更容易实现的内容),其中包含有关参与每个锦标赛的玩家数量的信息。 参与的玩家 playerA playerB 列的集合(无重复)。

如果添加了新列,则新数据框应如下所示(锦标赛1有4名玩家参与,即 A,B,C和D ;锦标赛2有3名玩家参与,即, A,B和C ):

tournament    playerA    playerB    players_sum
1             A          B          4
1             C          B          4
1             D          A          4
2             A          B          3
2             A          C          3

如果创建新数据帧更容易,它可能/应该如下所示:

tournament    players_sum
1             4
2             3

我到目前为止尝试了什么:我尝试了groupby()然后apply()transform()但是我不知道如何合并两列的信息( playerA playerB )。

谢谢,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我会通过为tourneys = df['tournament'].unique() player_dict = {} for event in tourneys: ndf = df[df['tournament'] == event].copy() player_dict[event] = len(ndf['playerA'].append(ndf['playerB']).unique()) df['player_sum'] = df['tournament'].map(player_dict) 锦标赛和玩家值创建字典,然后将其映射到新列来实现此目的。

  playerA playerB  tournament  player_sum
0       A       B           1           4
1       C       B           1           4
2       D       A           1           4
3       A       B           2           3
4       A       C           2           3

DF

{{1}}

答案 1 :(得分:1)

同时,我也找到了解决方案,我想在此发布:

def myfunc(group):
    w_set = set(group['playerA'])
    l_set = set(group['playerB'])
    group['player_sum'] = len(w_set.union(l_set))
    return group

df = df.reset_index().groupby('tournament').apply(myfunc)