Python 如何根据其他列的唯一组合添加id列?

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,

我使用的是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,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应该相同。这是否回答了您的问题?