如何用多字典生成含百分比的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
相关产品推荐
相关产品推荐

