You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从透视表(Pivot Table)生成用户距离DataFrame?

生成用户间距离矩阵的实现方案

问题说明

已将用户-物品关联表转换为布尔型透视表,可计算单个用户对的曼哈顿距离(绝对值之和),需要生成包含所有用户对距离的完整矩阵。

初始关联表

用户拥有物品
AliceApple
BobBanana
CarolCarrot
BobApple

转换后的布尔透视表

AppleBananaCarrot
Alice100
Bob110
Carol001

目标距离矩阵(曼哈顿距离)

AliceBobCarol
Alice012
Bob103
Carol230

实现方法

方法1:使用scipy快速计算(推荐)

借助scipy.spatial.distance_matrix直接生成距离矩阵,指定cityblock(曼哈顿距离)匹配需求:

import pandas as pd
from scipy.spatial import distance_matrix

# 1. 生成透视表(复用现有代码)
df = pd.DataFrame({
    "person": ["Alice", "Bob", "Carol", "Bob"],
    "hasa": ["Apple", "Banana", "Carrot", "Apple"]
})
df["val"] = 1
pivot = df.pivot(index="person", columns="hasa", values="val").fillna(0)

# 2. 计算并转换为DataFrame
dist_matrix = pd.DataFrame(
    distance_matrix(pivot.values, pivot.values, metric='cityblock'),
    index=pivot.index,
    columns=pivot.index
)

# 输出结果
print(dist_matrix)

优点:效率极高,适合大规模数据集;代码简洁。

方法2:纯Pandas实现

利用Pandas的apply和广播机制完成计算,无需额外依赖:

import pandas as pd

# 生成透视表步骤同上
df = pd.DataFrame({
    "person": ["Alice", "Bob", "Carol", "Bob"],
    "hasa": ["Apple", "Banana", "Carrot", "Apple"]
})
df["val"] = 1
pivot = df.pivot(index="person", columns="hasa", values="val").fillna(0)

# 计算距离矩阵
dist_matrix = pivot.apply(lambda user_row: (pivot - user_row).abs().sum(axis=1))

print(dist_matrix)

优点:仅依赖Pandas,逻辑直观;中等规模数据表现良好。

方法3:手动循环实现(仅小数据集测试用)

通过双重循环逐个计算用户对距离,效率较低,仅适合调试或极小数据集:

import pandas as pd

# 生成透视表步骤同上
df = pd.DataFrame({
    "person": ["Alice", "Bob", "Carol", "Bob"],
    "hasa": ["Apple", "Banana", "Carrot", "Apple"]
})
df["val"] = 1
pivot = df.pivot(index="person", columns="hasa", values="val").fillna(0)

# 初始化空矩阵
users = pivot.index.tolist()
dist_matrix = pd.DataFrame(0, index=users, columns=users)

# 双重循环计算每个用户对的距离
for user_a in users:
    for user_b in users:
        dist_matrix.loc[user_a, user_b] = (pivot.loc[user_a] - pivot.loc[user_b]).abs().sum()

print(dist_matrix)

优点:逻辑完全透明;缺点:时间复杂度O(n²),大数据集下性能极差。


内容的提问来源于stack exchange,提问作者Sasha Sloan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:45:18