如何合并含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
相关产品推荐
相关产品推荐

