首页 > 解决方案 > Pandas 遍历行,创建用于比较和计算距离的数据框

问题描述

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]

然后我想将詹姆斯特征向量与上面列出的球员进行比较并取平均值。最终输出应该是(注意:我在 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

标签: pythonpandas

解决方案


推荐阅读