python - 如何计算两个包含列表的系列之间的相似性度量?
问题描述
有以下系列:
a = pd.Series([[1,2,34], [2,3], [2,3,4,5,1]], index = [1,2,3])
1 [1, 2, 34]
2 [2, 3]
3 [2, 3, 4, 5, 1]
和以下指标:
def metric(x, y):
return len(np.intersect1d(x, y))
我想计算系列的相似性指标,结果应该是:
1 2 3
1 3 1 2
2 1 2 2
3 2 2 5
到目前为止,我使用了这个:
sims = a.map(lambda x: a.map(lambda y: metric(x, y)))
pd.DataFrame({k: v for k,v in sims.items()})
我想知道是否有另一种更优雅的方法可以实现这一目标。
解决方案
您可以使用pd.concat
将pd.Series
对象连接在一起,它更有效。
pd.concat([a.apply(metric, args=(a.loc[y],)) for y in a.index], 1)
推荐阅读
- javascript - 开玩笑 - 如何模拟嵌套函数?
- android - 将原生 Twilio Android SDK 与 Flutter 集成
- c# - 如何使用 Roslyn 获取字段符号的包含类?
- javascript - 我如何通过 websocket js 发送标头而不需要响应
- docker - 将流量重定向到 Kubernetes 服务中的 Tomcat 上下文路径
- java - 如何禁用 JPA 加入继承实体的删除级联?
- html - 我在 JSX 应用程序中遇到重叠元素的问题
- c# - 通用方法与演员
- sql - 将一条活动记录与其他类似记录进行比较的代码
- javascript - 如何使用来自 api url 的 json 填充颜色图?