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

如何从含NaN的分组计数Series创建DataFrame并重命名计数列

解决Pandas中统计NaN行频次并生成可操作DataFrame的问题

问题根源

你报错的原因是转换后的grouped_nan_df只有1列(列名为count),但你用了columns[5]去索引,超出了列的数量范围,自然会触发索引越界错误。

更简洁的实现方法

不需要先分组再统计,直接对标记NaN的DataFrame使用value_counts()就能按行统计频次,一步生成可操作的DataFrame:

import pandas as pd

# 1. 创建含NaN的数据集
dataset = (
    [1,2,3,4,5,6],
    [1,None,3,4,5,6],
    [1,None,3,4,5,6],
    [1,2,None,4,5,6],
    [1,None,3,None,5,6],
    [1,2,None,4,5,6],
    [1,None,3,None,5,6],
    [1,2,3,4,5,None],
    [1,2,3,4,5,None]
)    
df = pd.DataFrame(dataset, columns=['A','B','C','D','E','F'])

# 2. 生成标记NaN的DataFrame
nan_df = df.isna()

# 3. 直接统计每行的出现频次,转成DataFrame并重置索引
# value_counts会自动按行分组统计,sort=True控制排序
count_result = nan_df.value_counts(sort=True).reset_index(name='new_count')

print(count_result)

执行后会得到如下结构的DataFrame,所有原布尔列和计数列都可直接操作:

A      B      C      D      E      F  new_count
0  False  False  False  False  False  False          1
1  False  False  False  False  False   True          2
2  False  False   True  False  False  False          2
3  False   True  False  False  False  False          2
4  False   True  False   True  False  False          2

修复你原有代码的方法

如果你坚持用原来的groupby+value_counts流程,只需修改重命名列的代码,并重置索引将多级索引转为列:

# 原有代码到生成grouped_nan_df
grouped_nan = nan_df.groupby(['A','B', 'C', 'D','E', 'F'], sort=True).value_counts()
grouped_nan_df = grouped_nan.to_frame()

# 正确重命名计数列(原列名为'count')
grouped_nan_df.rename(columns={'count': 'new_count'}, inplace=True)

# 将多级索引转为普通列,得到可操作的DataFrame
grouped_nan_df = grouped_nan_df.reset_index()

print(grouped_nan_df)

后续复用子集(如取前5项)

得到DataFrame后,直接用head()就能取前N项,和SQL的逻辑一致:

top5 = count_result.head(5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:33:16