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

如何为缺失同名行的DataFrame补0合并,保留必要重复行?

解决DataFrame合并时数据偏移且保留重复行的方案

核心思路是给每个重复的itemDescEng行添加唯一标识,通过复合索引实现精准对齐,缺失行自动补0,同时保留所有必要的重复行。

修改后的代码

import pandas as pd
import requests

stockData = []
for a, b, c, d in list_of_Dates:
    parameters = (
        ("companyCode", each),
        ("exchange", "USD"),
        ("financialGroup", value),
        ("year1", a[0]),
        ("period1", a[1]),
        ("year2", b[0]),
        ("period2", b[1]),  # 修正原代码笔误:[b1]改为b[1]
        ("year3", c[0]),
        ("period3", c[1]),
    )

    # 修正原代码语法错误:json()需要加括号
    req = requests.get(url, params=parameters).json()["value"]
    data = pd.DataFrame.from_dict(req)
    # 修正原代码语法错误:value'4'改为'value4'
    filteredData = data.filter(items=['itemDescEng', 'value1', 'value2', 'value3', 'value4'])
    
    # 给每个itemDescEng的重复行添加序号,生成唯一标识
    filteredData['dup_idx'] = filteredData.groupby('itemDescEng').cumcount()
    # 设置复合索引,确保重复行也能精准匹配
    filteredData.set_index(['itemDescEng', 'dup_idx'], inplace=True)
    
    stockData.append(filteredData)

# 按复合索引合并,自动对齐所有行,缺失行填充NaN
df = pd.concat(stockData, axis=1)
# 将缺失值替换为0
df.fillna(0, inplace=True)
# 还原索引,恢复原有数据结构
df.reset_index(inplace=True)
# 可选择删除辅助序号列,根据需求保留或移除
df.drop(columns=['dup_idx'], inplace=True)

关键步骤说明

  1. 添加重复行序号:通过groupby('itemDescEng').cumcount()为每个重复的itemDescEng行分配递增序号,确保同一描述的重复行有唯一标识。
  2. 设置复合索引:用itemDescEng+序号作为复合索引,让每个行都有唯一的定位键,避免合并时重复行错位。
  3. 索引对齐合并:pd.concat(axis=1)会自动按照复合索引对齐所有DataFrame,缺失的索引行将填充NaN,最后用fillna(0)替换为0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:22:46