首页 > 解决方案 > 将函数应用于 Python 中的多个列

问题描述

我有一个看起来像这样的数据框:

序列号 直流
城市 城市
电子邮件地址 电子邮件地址
贷款号码 贷款信息
电话号码 电话号码

我想应用一个 cosdis 函数,它将 SN 和 DC 列作为输入。例如 cosdis('city','city') 等。

def word2vec(word):
    from collections import Counter
    from math import sqrt

    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))

    return cw, sw, lw

def cosdis(v1, v2):
    
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

所以我这样做: df['cosSim'] = df.apply(lambda x: cosdis(word2vec(x.SN),word2vec(x.DC)), axis = 1)

我得到这个结果:

序列号 直流 宇宙模拟
城市 城市 0.707107
0.774597
电子邮件地址 电子邮件地址 0.912871
贷款号码 贷款信息 0.548703
电话号码 电话号码 0.888523

但是,当我只将输入直接放入函数时,我会得到不同的结果。例如 print(cosdis(word2vec('city'),word2vec('city'))) 的输出为 1。

关于发生了什么的任何建议?

谢谢!

标签: pythonpandascosine-similarity

解决方案


推荐阅读