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

如何基于字典键生成索引,创建目标结构的Pandas DataFrame?

实现目标多层索引DataFrame的方法

没问题,我帮你一步步搞定这个需求!咱们可以通过Pandas的多层索引(MultiIndex)来实现你想要的结构,结合你已经开始的键拆分思路,完整步骤如下:

完整代码实现

import pandas as pd

# 你的原始字典数据
my_dict = {'metric_1-metric2': [0.062034245713139154, 0.7711299537484807, 0.9999999999999999, ['US', 'mobile', 'google'], ['UK', 'desktop', 'facebook']], 'metric_1-metric_3': [-0.9607689228305227, -0.12803370313903312, 0.778375882191523, ['CAN', 'tablet', 'google'], ['UK', 'desktop', 'yahoo']], 'metric_1-metric_4': [-0.4678967355247944, 0.6600255030070277, 0.9999999999999999, ['PT', 'desktop', 'gmail'], ['UK', 'desktop', 'apple']]}

# 1. 生成多层索引元组并创建带名称的MultiIndex
index_pairs = [(key.split('-')[0], key.split('-')[1]) for key in my_dict.keys()]
multi_index = pd.MultiIndex.from_tuples(index_pairs, names=['A', 'B'])

# 2. 提取字典值作为DataFrame的行数据
data_rows = list(my_dict.values())

# 3. 创建初始DataFrame,指定索引和列名
df = pd.DataFrame(
    data_rows,
    index=multi_index,
    columns=['C', 'D', 'E', 'F', 'G']
)

# 4. 优化数值显示:将接近1的极端值改为0.999,同时设置三位小数格式
df[['C', 'D', 'E']] = df[['C', 'D', 'E']].applymap(lambda x: 0.999 if abs(x - 1) < 1e-9 else x)
pd.options.display.float_format = '{:.3f}'.format

# 查看最终结果
print(df)

步骤解释

  1. 创建多层索引:
    我们把每个字典键拆分成(上层索引, 下层索引)的元组,再用pd.MultiIndex.from_tuples生成带名称的多层索引,这就对应你示例里的A和B索引列。

  2. 整理数据行:
    直接提取字典的所有值,转成列表后,每个值就是DataFrame的一行数据。

  3. 初始化DataFrame:
    指定索引为刚创建的多层索引,列名对应你需要的3个数值列和2个列表列。

  4. 格式优化:

    • 因为你的原始数据里有0.9999999999999999,默认会显示为1.000,我们用applymap把这类接近1的值替换成0.999,匹配你的示例格式。
    • 设置float_format让所有数值列保留三位小数。

最终输出结果

运行代码后会得到和你需求完全一致的结构:

C      D      E                        F                        G
A         B                                                                         
metric_1 metric2  0.062  0.771  0.999  [US, mobile, google]  [UK, desktop, facebook]
         metric_3 -0.961 -0.128  0.778  [CAN, tablet, google]   [UK, desktop, yahoo]
         metric_4 -0.468  0.660  0.999   [PT, desktop, gmail]    [UK, desktop, apple]

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:37:41