首页 > 解决方案 > 如何计算两个包含列表的系列之间的相似性度量?

问题描述

有以下系列:

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()})

我想知道是否有另一种更优雅的方法可以实现这一目标。

标签: pythonpandas

解决方案


您可以使用pd.concatpd.Series对象连接在一起,它更有效。

pd.concat([a.apply(metric, args=(a.loc[y],)) for y in a.index], 1)

推荐阅读