如何从5人阵容组合中创建2人、3人和4人篮球阵容ID?

2024-09-28 17:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图获取NBA逐场比赛的数据,以获取特定于阵容的信息,我通过为每个独特的球员组合创建阵容ID来实现这一点。我能够得到特定的5人阵容,但我正在努力寻找将df分为2人、3人和4人阵容的最佳方法

以下是数据集的演示版本:

cols = ['defensePlayer1Id', 'defensePlayer2Id', 'defensePlayer3Id', 'defensePlayer4Id', 'defensePlayer5Id', 'offensePlayer1Id', 'offensePlayer2Id', 'offensePlayer3Id', 'offensePlayer4Id', 'offensePlayer5Id', 'points', 'seconds']

data = [[1,2,3,4,5,101,102,103,104,105,3,15],[1,2,3,4,6,101,102,103,104,105,2,12],[1,2,3,4,5,101,102,103,104,106,0,14]]

df = pd.DataFrame(data=data,columns=cols)

对于5人,我只是使用factorize为每个组合创建一个唯一的阵容id,但是当我需要将df切片到包含唯一4人组合的位置时,我不确定如何实现这一点

这是我的5人阵容代码(顺便说一句,我是一个非常业余的人,所以如果我的代码中有明显的低效,请随时告诉我)。在这种情况下,我试图获得每个防守阵容的df,然后找到他们面对的每个进攻阵容的df:

df['deflineupid'] = pd.factorize(df.defensePlayer1Id.astype(str) + df.defensePlayer2Id.astype(str) + df.defensePlayer3Id.astype(str) + df.defensePlayer4Id.astype(str) + df.defensePlayer5Id.astype(str))[0]
df['offlineupid'] = pd.factorize(df.offensePlayer1Id.astype(str) + df.offensePlayer2Id.astype(str) + df.offensePlayer3Id.astype(str) + df.offensePlayer4Id.astype(str) + df.offensePlayer5Id.astype(str))[0]

deflineups = df.deflineupid.unique().tolist()

for deflineup in deflineups:
    defdf = df.loc[df.deflineupid == deflineup]
    offlineups = defdf.offlineupid.unique().tolist()
    offdf = df[df.offlineupid.isin(offlineups)]

所以,我想再次指出的问题是,如何用独特的4人阵容来复制这一点。还值得注意的是,每个唯一的玩家ID并不总是在同一列中。因此,同样的4人阵容可能出现在defensePlayer1ID:defensePlayer4ID中,也可能出现在defensePlayer2ID:defensePlayer5ID中,也可能被分割

如果您有任何其他问题或需要我提供其他信息,我很乐意补充我遗漏的任何内容

提前谢谢


Tags: 数据信息iddfdatapdcolsstr
1条回答
网友
1楼 · 发布于 2024-09-28 17:18:59

无论如何,我提出了一个可能效率低下的解决方案

我逐个删除每个defenseplayer列,重新标记这些列,然后将它们附加到新的df

因此,新的df拥有原始列x5的数量,但只有4人阵容。然后,我使用factorize为4人阵容创建阵容ID

同样,这可能是低效的,但允许我做我现在试图做的事情

如果有人有更好的方法,请告诉我

相关问题 更多 >