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

扩展转换DataFrame:实现两两用户byte array差异双向对比

解决用户饮食喜好对比问题

步骤1:构造示例DataFrame

假设我们的原始饮食喜好数据如下(1代表喜欢,0代表不喜欢):

import pandas as pd

data = {
    '汉堡': [1, 0, 1],
    '披萨': [0, 1, 1],
    '沙拉': [1, 1, 0],
    '寿司': [0, 0, 1]
}
df = pd.DataFrame(data, index=['tom', 'jenny', 'bob'])

原始DataFrame输出:

汉堡  披萨  沙拉  寿司
tom     1   0   1   0
jenny   0   1   1   0
bob     1   1   0   1

步骤2:生成双向用户对并计算差异

我们需要生成所有双向用户组合(如tom-jenny和jenny-tom均保留),再逐位对比饮食喜好的差异:

# 获取所有用户列表
users = df.index.tolist()
# 生成所有非自身的双向用户对
user_pairs = [(u1, u2) for u1 in users for u2 in users if u1 != u2]

# 计算每对用户的差异标记
diff_results = []
for u1, u2 in user_pairs:
    # 对应位置值不同标记为1,相同标记为0
    diff = (df.loc[u1] != df.loc[u2]).astype(int)
    diff_results.append(diff)

# 构造两种格式的结果DataFrame
# 格式1:MultiIndex索引
result_multi = pd.DataFrame(
    diff_results,
    index=pd.MultiIndex.from_tuples(user_pairs, names=['用户A', '用户B'])
)

# 格式2:分两列展示用户对
result_cols = pd.DataFrame(diff_results)
result_cols[['用户A', '用户B']] = user_pairs
# 调整列顺序,把用户对列放在前面
result_cols = result_cols[['用户A', '用户B'] + df.columns.tolist()]

步骤3:查看输出结果

MultiIndex格式输出

汉堡  披萨  沙拉  寿司
用户A  用户B              
tom   jenny  1   1   0   0
      bob    0   1   1   1
jenny tom    1   1   0   0
      bob    1   0   1   1
bob   tom    0   1   1   1
      jenny  1   0   1   1

分两列展示用户对格式输出

用户A   用户B  汉堡  披萨  沙拉  寿司
0    tom  jenny   1   1   0   0
1    tom    bob   0   1   1   1
2  jenny    tom   1   1   0   0
3  jenny    bob   1   0   1   1
4    bob    tom   0   1   1   1
5    bob  jenny   1   0   1   1

关键说明

  • 利用df.loc[u1] != df.loc[u2]直接对比两个用户的饮食喜好布尔值,再通过astype(int)将布尔值转为1/0,快速得到差异标记。
  • 双重循环遍历用户列表生成双向对,排除自身对比的情况,确保保留所有双向对比结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:57:28