family drafted IQ>120 Height>6.5 ShootPctg >0.4
James 2019 1 1 1
Richardson 2019 1 1 0
Embid 2019 0 1 1
Curry 2019 1 0 1
Ingram 2018 0 1 0
Ball 2019 1 0 1
James 2018 0 0 0
McGrady 2018 1 1 1
Curry 2017 1 0 0
Embid 2016 1 1 0
Kidd 2015 1 1 1
让我们假设我有一个像这样的数据框,其中包含篮球运动员的姓名及其特征。在这个假想的数据集中,许多球员的兄弟姐妹都在同一个联赛中比赛,但选拔年限却不同。我有兴趣了解这些球员与之前选秀中的球员相比有何不同。但是,重要的一点是,我不想将这些球员与他们的兄弟姐妹进行比较。为此, 首先,我创建一个玩家特征向量:
df = df.assign(vector = df.iloc[:, -3:].values.tolist())
df['vector'] = df['vector'].apply(np.array)
然后我得到:
family drafted IQ>120 Height>6.5 ShootPctg >0.4 vector
James 2019 1 1 1 [1, 1, 1]
Richardson 2019 1 1 0 [1, 1, 0]
Embid 2019 0 1 1 [0, 1, 1]
Curry 2019 1 0 1 [1, 0, 1]
Ingram 2018 0 1 0 [0, 1, 0]
Ball 2019 1 0 1 [1, 0, 1]
James 2018 0 0 0 [0, 0, 0]
McGrady 2018 1 1 1 [1, 1, 1]
Curry 2017 1 0 0 [1, 0, 0]
Embid 2016 1 1 0 [1, 1, 0]
Kidd 2015 1 1 1 [1, 1, 1]
鉴于我现在有一个总结球员特征的向量,我可以简单地将每个球员的向量与前一年选出的球员(不包括兄弟姐妹)进行比较,然后取平均值。 让我们以詹姆斯起草的2019为例: 詹姆斯的陪衬将是2019年之前选拔的所有球员,不包括他的兄弟詹姆斯在2018年选拔的球员。即,
family drafted IQ>120 Height>6.5 ShootPctg >0.4 vector
McGrady 2018 1 1 1 [1, 1, 1]
Curry 2017 1 0 0 [1, 0, 0]
Embid 2016 1 1 0 [1, 1, 0]
Kidd 2015 1 1 1 [1, 1, 1]
然后我想将James特征向量与上面列出的玩家的特征向量进行比较,并取平均值。最终输出应该是(注意:我在dstnctv列上补了数字):
family drafted IQ>120 Height>6.5 ShootPctg >0.4 dstnctv
James 2019 1 1 1 0.23
Richardson 2019 1 1 0 0.12
Embid 2019 0 1 1 0.14
Curry 2019 1 0 1 0.23
Ingram 2018 0 1 0 0.12
Ball 2019 1 0 1 0.11
James 2018 0 0 0 0.09
McGrady 2018 1 1 1 0.05
Curry 2017 1 0 0 0.11
Embid 2016 1 1 0 0.02
Kidd 2015 1 1 1 0.03