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

如何用多字典生成含百分比的DataFrame并优化pd.get_dummies

解决方法:用透视表替代pd.get_dummies实现带数值的宽表转换

你遇到的问题根源在于pd.get_dummies的设计目标——它是用来生成二进制哑变量(仅标记是否存在)的工具,本身无法关联并填充其他数值列的内容。要实现以文件名为索引、匹配文本为列、百分比为值的DataFrame,正确的思路是先整合所有数据,再用透视表(pivot/pivot_table)重塑结构。

步骤1:整合三个字典为统一的DataFrame

首先把三个字典的对应数据合并到一个DataFrame中,同时注意将百分比字符串转为数值类型:

import pandas as pd

# 示例数据
Dict1 = {'str1A':'file1', 'str1B':'file1', 'str2A':'file2', 'str2B':'file2'}
Dict2 = {'str1A':'jump', 'str1B':'fly', 'str2A':'jump', 'str2B':'run'}
Dict3 = {'str1A':'90', 'str1B':'60', 'str2A':'75', 'str2B':'85'}

# 合并为原始DataFrame
df_origin = pd.DataFrame({
    'file': Dict1.values(),
    'text': Dict2.values(),
    'percent': Dict3.values()
}, index=Dict1.keys())

# 将百分比字符串转为浮点型(后续计算/展示更合理)
df_origin['percent'] = df_origin['percent'].astype(float)

步骤2:用透视表生成目标结构

根据你的需求,用pivot_table(或pivot,当每个(file, text)组合唯一时)来重塑数据:

情况1:每个(file, text)组合仅对应一个百分比值

直接使用pivot即可:

result_df = df_origin.pivot(index='file', columns='text', values='percent')

情况2:存在重复的(file, text)组合(需要聚合处理)

如果同一个文件的同一个匹配文本对应多个百分比值,可通过aggfunc指定聚合规则(比如取最大值、平均值等):

# 示例:取同一(file, text)组合的最大百分比
result_df = df_origin.pivot_table(
    index='file',
    columns='text',
    values='percent',
    aggfunc='max'  # 可替换为'mean'/'first'等,按需选择
)

最终结果示例

执行后会得到符合预期的DataFrame:

text   fly   jump    run
file                    
file1  60.0  90.0    NaN
file2   NaN  75.0  85.0

无匹配的位置会自动填充NaN,完全满足你的需求。

内容的提问来源于stack exchange,提问作者F.Lira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:27