Python 如何根据其他列的唯一组合添加id列?
我使用的是NBA逐场比赛数据,其中包含了每个防守球员和每个进攻球员的球员ID号。我想为每个排列组合添加一列,因此是deflinid和offlinid 以下是数据集示例的代码:Python 如何根据其他列的唯一组合添加id列?,python,pandas,Python,Pandas,我使用的是NBA逐场比赛数据,其中包含了每个防守球员和每个进攻球员的球员ID号。我想为每个排列组合添加一列,因此是deflinid和offlinid 以下是数据集示例的代码: df = pd.DataFrame(np.array([[1,2,3,4,5,11,12,13,14,15,5,5],[1,2,3,4,6,11,12,13,14,15,4,4],[2,3,4,5,6,11,12,13,14,15,3,5],[11,12,13,14,15,1,2,3,4,5,5,5],[11,12,13,
df = pd.DataFrame(np.array([[1,2,3,4,5,11,12,13,14,15,5,5],[1,2,3,4,6,11,12,13,14,15,4,4],[2,3,4,5,6,11,12,13,14,15,3,5],[11,12,13,14,15,1,2,3,4,5,5,5],[11,12,13,14,15,1,2,3,4,6,10,10],[11,12,13,14,16,2,3,4,5,6,5,5]]),columns=['offplayer1','offplayer2','offplayer3','offplayer4','offplayer5','defplayer1','defplayer2','defplayer3','defplayer4','defplayer5','possessions','points'])
然后,我想为每个独特的5人ID组合创建带有列队ID的列
下面是我希望根据上述示例df生成并添加到df中的两列示例:
offlinid deflinid
1 4
2 4
3 4
4 1
4 2
5 3
提前谢谢 使用
pd.concat
将offplayerX
列堆叠在deplayerx
列的顶部。接下来,agg
将每一行转换为元组,并调用rank
和unstack
offcols = ['offplayer1', 'offplayer2', 'offplayer3', 'offplayer4', 'offplayer5']
defcols = ['defplayer1', 'defplayer2', 'defplayer3', 'defplayer4', 'defplayer5']
df1 = pd.concat([df[offcols], df[defcols].rename(columns=dict(zip(defcols, offcols)))],
keys=['offlinid', 'deflinid'])
df_final = df1.agg(tuple, axis=1).rank(method='dense').unstack(0)
Out[92]:
offlinid deflinid
0 1.0 4.0
1 2.0 4.0
2 3.0 4.0
3 4.0 1.0
4 4.0 2.0
5 5.0 3.0
用散列组成一列,看看这里我们从哪里得到playerID组合的数字?例如,为什么防守组合11,12,13,14,15是4而不是1?@moys因为阵容ID“1”已经分配给了阵容组合“1,2,3,4,5”,最终阵容ID的顺序并不重要,只是为每个唯一的组合分配了一个唯一的编号。。。对于相同的球员组合,进攻和防守阵容ID应该相同。这是否回答了您的问题?