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

如何基于字典构建DataFrame并生成值组合与乘积列

解决方案

直接用zip按索引匹配各键的取值,再计算乘积,最后组装成DataFrame:

import pandas as pd
import math  # Python3.8+支持math.prod,用于快速计算乘积

# 给定数据
names = [["name_0", "name_1"], ["name_2", "name_3"], ["name_2", "name_3", "name_4"]]
dict_1 = {"name_0": [1,2], "name_1": [1,2]}
dict_2 = {"name_2": [2,3], "name_3": [1,3]}
dict_3 = {"name_2": [2,3], "name_3": [1,3], "name_4": [2,3]}
data_3 = [dict_1, dict_2, dict_3]

# 收集每行数据
rows = []
for name_group, curr_dict in zip(names, data_3):
    # 按names列表的顺序提取对应值的列表,保证组合顺序正确
    value_lists = [curr_dict[name] for name in name_group]
    # 按索引打包所有值的组合(同位置元素配对)
    for combo in zip(*value_lists):
        # 计算组合的乘积
        product = math.prod(combo)
        # 添加到行列表
        rows.append({
            "names": name_group,
            "values": list(combo),
            "multi": product
        })

# 生成DataFrame
result_df = pd.DataFrame(rows)
print(result_df)

关键说明:

  • 按顺序匹配:通过[curr_dict[name] for name in name_group]确保提取的值列表顺序和names中的键顺序一致,避免字典键无序导致的错误。
  • 同索引组合:zip(*value_lists)会把每个值列表的同索引元素打包成元组,正好对应你需要的values列内容。
  • 兼容低版本Python:如果使用Python3.7及以下版本,替换math.prod(combo)为手动循环相乘即可:
    product = 1
    for num in combo:
        product *= num
    

运行后输出的DataFrame完全符合期望:

names      values  multi
0           [name_0, name_1]      [1, 1]      1
1           [name_0, name_1]      [2, 2]      4
2           [name_2, name_3]      [2, 1]      2
3           [name_2, name_3]      [3, 3]      9
4  [name_2, name_3, name_4]  [2, 1, 2]      4
5  [name_2, name_3, name_4]  [3, 3, 3]     27

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:45