我有以下包含体育比赛信息的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 )。
谢谢,非常感谢您的帮助。
答案 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)