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

基于两个现有Pandas DataFrame创建新DataFrame的高效实现咨询

问题解答

嵌套字典方案的合理性

你的嵌套字典方案是合理的,尤其针对你这种大尺寸的DataFrame(599379行×319列),因为字典的键值对查找是O(1)时间复杂度,能高效完成列值映射操作,避免多次合并带来的性能损耗。

如何从df2创建嵌套字典

可以利用pandas的groupby和apply方法快速生成目标嵌套字典:

# 从df2生成嵌套映射字典
mapping_dict = df2.groupby('C').apply(lambda group: dict(zip(group['D'], group['E']))).to_dict()

这段代码会按C列分组(对应df1的列名A、B等),每个组内将D列作为键、E列作为值生成子字典,最终组合成和你示例结构完全一致的嵌套字典。

应用字典生成期望输出

拿到映射字典后,遍历df1的每一列,用map方法生成对应的新列(原列名+1):

# 为df1添加映射后的新列
for col in df1.columns:
    df1[f"{col}1"] = df1[col].map(mapping_dict[col])

执行后df1就会包含原列和对应的映射列,完全符合你的期望输出格式。

替代方案

如果不想用嵌套字典,也可以将df2转换为宽表后与df1拼接,但这种方式在处理大数据集时效率不如字典映射,且对数据顺序有严格要求:

import pandas as pd

# 将df2转为宽表格式
df2_wide = df2.pivot(index='D', columns='C', values='E').rename(columns=lambda x: f"{x}1").reset_index(drop=True)
# 拼接df1和转换后的df2
result = pd.concat([df1, df2_wide], axis=1)

注意:此方法要求df1的每行值顺序必须与df2中D列的唯一值顺序完全一致,否则会出现映射错误。相比之下,字典映射的容错性和灵活性更强,更适合你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:55:22