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

PySpark:将列级统计结果按列聚合而非行聚合的实现

按列组织DataFrame统计信息并扩展指标

示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': [1, 2, np.nan, 4],
    'col2': [5, 6, 7, 8],
    'col3': [np.nan, np.nan, 10, 11]
})

方案1:直接生成按列组织的统计结果(高效无重塑)

无需使用melt/pivot,直接通过列聚合+转置生成按列维度排列的统计表,同时可轻松添加衍生指标:

# 定义需要的统计指标
stats = {
    'nan_count': lambda x: x.isna().sum(),
    'non_null_count': 'count'  # 内置统计函数直接调用
}

# 生成基础统计结果,转置后将原DataFrame的列转为统计表的行
stats_df = df.agg(stats).T

# 新增衍生指标:判断列是否无空值
stats_df['has_no_nulls'] = stats_df['nan_count'] == 0

print(stats_df)

输出结果:

nan_count  non_null_count  has_no_nulls
col1            1               3         False
col2            0               4          True
col3            2               2         False

方案2:在原DataFrame中新增统计行

如果需要保留原始数据并在底部追加统计行,可通过pd.concat实现:

# 生成空值数量统计行
nan_count_row = pd.Series(
    data=[df[col].isna().sum() for col in df.columns],
    index=df.columns,
    name='nan_count'
)

# 生成无空值标识统计行
has_no_null_row = pd.Series(
    data=[df[col].isna().sum() == 0 for col in df.columns],
    index=df.columns,
    name='has_no_nulls'
)

# 将统计行合并到原DataFrame
df_with_summary = pd.concat([df, nan_count_row.to_frame().T, has_no_null_row.to_frame().T])

print(df_with_summary)

输出结果:

col1  col2  col3
0            1.0   5.0   NaN
1            2.0   6.0   NaN
2            NaN   7.0  10.0
3            4.0   8.0  11.0
nan_count    1.0   0.0   2.0
has_no_nulls False  True False

方案优势

两种方案都避免了melt/pivot的数据重塑操作,在列数较多的场景下性能更优;同时统计结构清晰,便于后续扩展更多指标(如唯一值数量、均值等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:36:20