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

为何pandas.DataFrame.join未按预期工作?索引匹配后行数异常

问题原因分析

你的核心问题出在重复索引匹配和中间步骤的行数变化上:

  1. 原始inverters存在大量重复的三层索引(Time (ps), n_TDC, signal),总行数为4502709。
  2. 你的处理流程中,_的行数意外变为269973(推测是某一步操作中对重复索引的行进行了隐式去重,或索引对齐时只保留了唯一索引组合的行)。
  3. 当执行inverters.join(_)时,pandas默认使用左连接(left join):保留左侧inverters的所有行,将右侧_中匹配索引的值广播到所有对应重复行,因此最终行数和原始inverters一致,而非_的行数。

解决方案:生成与inverters同行数的归一化列

不需要复杂的索引重置操作,直接通过分组变换(transform)实现组内归一化,确保结果与原DataFrame行数一致:

# 直接在原DataFrame上生成归一化列,避免索引问题
inverters['Voltage (normalized)'] = inverters.groupby(['n_TDC', 'signal'])['Voltage (ADCu)'].transform(
    lambda x: (x - x.min()) / (x.max() - x.min())
)

代码说明:

  • groupby.transform()会对每个分组内的元素执行计算,并将结果广播回原DataFrame的对应行,保证行数与原DataFrame完全一致。
  • 公式(x - x.min()) / (x.max() - x.min())实现了组内的0-1归一化,避免你原代码中可能出现的除以0问题(若组内所有值相同,会返回NaN,可根据需求处理)。

验证结果

执行上述代码后,inverters将保留原始4502709行,新增的Voltage (normalized)列会对应每一行的归一化值,完全符合你“按索引匹配横向拼接”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:35:18