python - 将函数应用于 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。
关于发生了什么的任何建议?
谢谢!
解决方案
推荐阅读
- amazon-redshift - 执行 AWS Redshift COPY 命令时的纪元时间戳到“yyyy-MM-dd HH:mm:ss.SSS”格式转换
- xml - 无法通过 IMPORTXML 从 Google 表格中的 NSE 网站获取数据
- php - SwifMailer setBcc 或 setTo 不起作用
- sql - 如果找不到,则搜索模式并删除搜索字符串字符,然后在 oracle sql 中再次搜索
- python - 我无法停止python中的循环
- navigation - Flutter Navigator:动态初始路由
- php - php中的总距离多个纬度和经度点?
- vb.net - 长 HEX 值拆分为 2 字节十六进制值或 4 字节十六进制值并将其转换为十进制(浮点)值使用 VB.Net
- r - 如何在 sqlite DB 中表的第一列上使用 dplyr 过滤器进行提取
- reactjs - React-apollo/Graphql:显示来自 DB 的结果