Python 基于其他列的计数添加列
我有以下包含体育比赛信息的熊猫数据框:Python 基于其他列的计数添加列,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下包含体育比赛信息的熊猫数据框: tournament playerA playerB 1 A B 1 C B 1 D A 2 A B 2 A C 2 A D 现在我想添加一个新的列(或者创建一个新的数据框;任何更容易实现的)
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 players_sum
1 4
2 3
到目前为止我一直在尝试:我尝试了groupby()
,然后尝试了apply()
或transform()
,但是我不知道如何合并两列(playerA和playerB)的信息
谢谢,非常感谢您的帮助。为此,我将为
unique()
锦标赛和玩家值创建一个字典,然后将其映射到新列
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)
df
同时,我也找到了一个解决方案,我想在这里发布:
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)
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
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)