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

如何从索引不同的DataFrame构建多层索引的目标DataFrame

问题根因

你原有代码报错的核心原因是索引对齐规则不匹配:你循环赋值时,每次筛选出来的浓度Series仍携带dfA原始的整数索引,和你提前给dfB设置的日期多层索引无法对应,pandas找不到匹配索引的位置就会自动填充NaN,仅第一列可能因巧合索引匹配成功有值。

最优解决方案

不需要手动循环,直接用Pandas内置的透视表功能即可一步生成目标dfB,操作步骤如下:

  1. 首先将dfA的行索引替换为你需要的日期多层索引,假设你示例中多层索引的两个字段分别为日期(如083021)和子编号(如14、15、57):
dfA = dfA.set_index(['日期', '子编号'])
  1. 直接调用pivot方法生成目标表:
dfB = dfA.pivot(columns='Sample Name', values='Calculated Concentration')
特殊场景适配
  • 如果存在「同一个日期多层索引+同一个样本名称」对应多条浓度值的情况,可以用pivot_table指定聚合规则处理重复值:
dfB = dfA.pivot_table(
    index=['日期', '子编号'], # 行多层索引字段
    columns='Sample Name', # 列字段为样本名
    values='Calculated Concentration', # 单元格值为浓度
    aggfunc='mean' # 重复值聚合规则,可替换为sum、first、last等
)
  • 如果你坚持要保留原有循环逻辑,只需要提前把dfA的索引统一修改为日期多层索引,即可匹配对齐:
# 提前设置dfA的多层索引
dfA = dfA.set_index(['日期', '子编号'])
# 初始化dfB的索引和dfA的唯一索引一致
dfB = pd.DataFrame(index=dfA.index.unique())
for name in nameList:
    dfB[str(name)] = dfA[dfA['Sample Name'] == str(name)]['Calculated Concentration']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:36:06