Pandas按日期分组计算多列相关性时出现NaN值问题求助
分组计算相关系数出现NaN的原因及解决方法
常见原因
- 分组样本量不足:计算相关系数要求每组至少有2个不同的观测值,如果某个
month_year分组只有1行数据,或者所有行的数值完全一致,就会输出NaN。 - 分组内列方差为0:比如某广告列(如Bing Ads、Criteo)在某个月份里全是0,或者所有值完全相同,此时计算相关系数时分母为0,结果会变成NaN。
排查与解决方法
- 检查分组样本数
先确认每个月份分组的行数:
print(m.groupby('month_year').size())
如果存在行数小于2的分组,可直接过滤掉这些分组后再计算:
# 过滤样本量≥2的分组 filtered_data = m.groupby('month_year').filter(lambda group: len(group) >= 2) m2 = filtered_data.groupby('month_year')[ ['units', 'revenue', 'transactions', 'Sessions', 'Bing Ads', 'Criteo','Facebook', 'Google Ads', 'Google Shopping'] ].corr()
- 检查分组内列的方差
查看每个分组中各列的方差,确认是否有方差为0的列:
group_var = m.groupby('month_year')[ ['units', 'revenue', 'transactions', 'Sessions', 'Bing Ads', 'Criteo','Facebook', 'Google Ads', 'Google Shopping'] ].var() print(group_var)
如果某列在分组内方差为0,可选择:
- 移除这些方差为0的列后再计算相关系数
- 对这类列做合理的数据填充(比如用同列其他月份的均值,需根据业务场景判断)
内容的提问来源于stack exchange,提问作者Syed Farhan Ahmed
相关产品推荐
相关产品推荐

