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

基于公共ID列值设置DataFrame索引并填充缺失值

问题分析

你遇到的核心问题是原始DataFrame的结构是多组ID-数值对(每两列一组,分别对应不同的指标列),而你之前的代码只处理了单一ID列,无法整合所有分散在不同组里的ID和对应数值。我们需要先拆分这些分组,再将它们合并成统一的以ID为索引的结构。

解决方案步骤

  1. 拆分原始数据为多个独立的小DataFrame,每个小DataFrame对应一组ID和指标列;
  2. 为每个小DataFrame设置ID为索引,确保指标列与ID正确关联;
  3. 使用**外连接(outer join)**合并所有小DataFrame,这样所有出现过的ID都会被保留,缺失的数值自动填充为NaN(即你需要的NA)。

具体代码实现

假设你的原始DataFrame已经加载为df,可以按以下步骤操作:

import pandas as pd

# 1. 拆分原始数据为四个独立的ID-指标组
df_mahaceb = df.iloc[:, [0, 1]].rename(columns={'ID': 'ID', 1: 'MAHACEB'}).drop_duplicates(subset='ID')
df_moropex = df.iloc[:, [2, 3]].rename(columns={'ID': 'ID', 3: 'MOROPEX'}).drop_duplicates(subset='ID')
df_otx01 = df.iloc[:, [4, 5]].rename(columns={'ID': 'ID', 5: 'OTX01'}).drop_duplicates(subset='ID')
df_mapoxub = df.iloc[:, [6, 7]].rename(columns={'ID': 'ID', 7: 'MAPOXUB'}).drop_duplicates(subset='ID')

# 2. 为每个小DataFrame设置ID为索引
df_mahaceb = df_mahaceb.set_index('ID')
df_moropex = df_moropex.set_index('ID')
df_otx01 = df_otx01.set_index('ID')
df_mapoxub = df_mapoxub.set_index('ID')

# 3. 外连接合并所有DataFrame
final_df = df_mahaceb.join([df_moropex, df_otx01, df_mapoxub], how='outer')

# 查看最终结果
print(final_df)

结果说明

运行上述代码后,你会得到期望的结构:所有出现过的ID作为索引,四个指标列对应填充数值,未匹配到的位置自动填充NaN。示例结果如下:

MAHACEB  MOROPEX  OTX01  MAPOXUB
ID                                         
A0AVT1         48.0     23.0    NaN     38.0
A0FGR8         35.0     19.0    NaN     10.0
A0JLT2         28.0     50.0    NaN     56.0
A0JNW5         35.0     23.0    NaN     26.0
A0MZ66         37.0     98.0    NaN     21.0
A0PJW6         48.0     27.0    NaN     29.0
A0A0B4J2F0     NaN      NaN   22.0      NaN
A0A0U1RRE5     NaN      NaN    3.0      NaN
A0A1B0GUS4     NaN      NaN   10.0      NaN
A0AV96         NaN      NaN   71.0      NaN
A0AVF1         NaN      NaN   40.0      NaN
A0AVT1         NaN      NaN   12.0      NaN

补充说明

  • 使用drop_duplicates(subset='ID')是为了避免同一ID在同一指标组里出现多次(如果原始数据有重复的话),如果你的数据没有重复,这一步可以省略;
  • join()方法默认是左连接,这里指定how='outer'可以确保所有ID都被保留,不管它在哪个组里出现过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:58:10