Pandas遍历行,创建数据帧进行比较并计算距离

2024-05-21 03:35:59 发布

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

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年之前征召的所有球员,排除他哥哥詹姆斯在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特征向量和上面列出的player进行比较,取平均值。最终输出应该是(注:我在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

Tags: dfrichardsonfamilyvector球员heightiqjames