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

如何合并含np.nan的DataFrame重复行并填充非空值

解决方案

一、合并重复Symbol行并填充空值

针对你的需求,无需拆分拼接DataFrame,直接用groupby结合聚合逻辑即可实现:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'Index': [0,1,2],
    'Symbol': ['x','y','x'],
    'Column A': ['a','d',np.nan],
    'Column B': [np.nan,'c','e'],
    'Status': ['Default']*3
})

# 定义聚合函数:提取列中的非空值(若有多个非空值取第一个,可按需调整)
def get_non_null(x):
    non_null_vals = x.dropna()
    return non_null_vals.iloc[0] if not non_null_vals.empty else np.nan

# 按Symbol分组聚合
merged_df = df.groupby('Symbol', as_index=False).agg({
    'Column A': get_non_null,
    'Column B': get_non_null,
    'Index': 'min'  # 保留原数据中最小的索引,匹配期望输出格式
})

# 设置Status字段:重复Symbol标记为Merged,唯一Symbol标记为Default
merged_df['Status'] = np.where(
    df['Symbol'].duplicated(keep=False),
    'Merged',
    'Default'
).groupby(df['Symbol']).first()

# 按索引排序,还原原数据的顺序
merged_df = merged_df.sort_values('Index').reset_index(drop=True)

执行后结果与你期望的一致:

| Index | Symbol | Column A | Column B |  Status  |
|-------|--------|----------|----------|----------|
|   0   |   x    |    a     |    e     |  Merged  |
|   1   |   y    |    d     |    c     | Default  |

二、解决“Gaps in blk ref_locs”错误

该错误多由索引损坏、内存碎片或数据类型异常导致,可按以下步骤修复:

  • 重置索引:先清除可能存在的索引间隙
    df = df.reset_index(drop=True)
    
  • 统一数据类型:确保日期、数值列类型正确,避免混合类型引发异常
    df['Entry Date'] = pd.to_datetime(df['Entry Date'])
    df['Entry Price'] = pd.to_numeric(df['Entry Price'], errors='coerce')
    df['Exit Price'] = pd.to_numeric(df['Exit Price'], errors='coerce')
    
  • 优化聚合逻辑:针对大数据量场景,改用更高效的填充方式减少内存占用
    # 按Ticker分组后,用后向填充取第一行完成合并
    merged_df = df.groupby('Ticker', as_index=False).apply(lambda x: x.bfill().head(1))
    merged_df['Status'] = np.where(df['Ticker'].duplicated(keep=False), 'Merged', 'Default')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:35:06