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

分组循环拆分DataFrame后合并:Event Study回归结果匹配问题

解决事件研究中分组回归结果合并NaN问题

合并后出现大量NaN,大概率是列匹配、合并方式或数据一致性的问题,直接按以下步骤排查解决:

1. 先确认列名与数据类型完全匹配

两个表的group_ID列必须名称完全一致(包括大小写、空格),且数据类型统一:

# 查看列名和数据类型
print(a_bn.dtypes)
print(全量数据表.dtypes)

# 统一列名(如果不一致)
a_bn.rename(columns={'group_id': 'group_ID'}, inplace=True)

# 统一数据类型(比如都转成字符串,避免整数/字符串不匹配)
a_bn['group_ID'] = a_bn['group_ID'].astype(str)
全量数据表['group_ID'] = 全量数据表['group_ID'].astype(str)

2. 用左连接替代默认内连接

默认的merge是内连接,只会保留两个表共有的group_ID,大表中不在a_bn里的行会被过滤或出现NaN。必须用左连接以全量数据表为基准匹配:

# 只保留a_bn里需要匹配的列(group_ID和a),避免冗余列干扰
merged_df = 全量数据表.merge(a_bn[['group_ID', 'a']], on='group_ID', how='left')

3. 清理a_bn中的重复group_ID

如果a_bn里同一个group_ID对应多个a值,合并后会出现重复行,也可能导致异常NaN,先去重:

# 保留每个group_ID的唯一a值(按需求选keep='first'或聚合计算)
a_bn_clean = a_bn.drop_duplicates(subset='group_ID', keep='first')

4. 处理剩余的NaN(可选)

如果大表中存在a_bn没有覆盖的group_ID,这些行的a列会是NaN,可根据研究需求填充:

# 用0填充
merged_df['a'] = merged_df['a'].fillna(0)
# 或用a列的均值填充
merged_df['a'] = merged_df['a'].fillna(merged_df['a'].mean())

验证结果

最后确认合并后的行数和NaN情况:

print(merged_df.shape)  # 应与全量数据表行数一致:1397187
print(merged_df['a'].isna().sum())  # 查看剩余NaN数量,定位未解决的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:10:36