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

NDO分组异常修复:pd.cut致NDO=0为NaN及热力图问题解决

解决NDO=0分组为NaN的问题及完整分组方案

问题根源

pd.cut默认采用左开右闭区间规则(right=True),如果你的分组边界起始值大于0(比如bins=[1,5,10,...]),NDO=0会落在所有区间之外,最终被标记为NaN。

正确分组方案

1. 定义包含0的分组边界与标签

直接将0纳入第一个分组区间,通过调整边界和参数确保0被正确匹配:

import pandas as pd

# 定义分组边界:-1确保0被包含,后续按需求划分区间
bins = [-1, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 100]
# 对应分组标签,与边界一一对应
labels = ['0天', '1-5天', '5-10天', '10-15天', '15-20天', '20-25天', 
          '25-30天', '30-35天', '35-40天', '40-45天', '45-50天', '50-100天']

# 生成NDOGroup列,include_lowest=True确保左边界被包含
df['NDOGroup'] = pd.cut(df['NDO'], bins=bins, labels=labels, include_lowest=True)

2. 验证分组结果

快速检查NDO=0的行是否被正确分组:

# 查看NDO=0的分组分布
print(df[df['NDO'] == 0]['NDOGroup'].value_counts())
# 确认无NaN分组
print(df['NDOGroup'].isna().sum())

生成透视表与热力图

透视表示例

按国家和NDO分组聚合购票数,填充空值避免热力图缺失:

pivot_table = df.pivot_table(
    values='Purch',
    index='Country',
    columns='NDOGroup',
    aggfunc='sum',  # 可替换为'mean'等聚合方式
    fill_value=0
)

热力图绘制示例

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
sns.heatmap(pivot_table, annot=True, fmt='g', cmap='YlGnBu')
plt.title('各国不同购票提前天数的购票数热力图')
plt.xlabel('距活动天数分组')
plt.ylabel('国家')
plt.show()

额外注意事项

  • 若数据集存在NDO负数(如活动后补购),可将bins左边界设为min(df['NDO']) - 1,确保所有值被覆盖
  • 如需左闭右开区间,可设置right=False,同时对应调整bins顺序与标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:20:02