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

如何在Python/Spark中统计DataFrame中ID_links列表元素数>1的ID数量及占比?

问题描述

现有如下格式的DataFrame:

IDID_links
0[10]
1[11, 12, 13]
2[14, 15]
3[16]
4[17, 18, 19, 20]

需要统计ID_links列中列表元素数量大于1的ID总数,以及这类ID占总ID的百分比。

伪代码逻辑:

  1. 遍历DataFrame的每一行
  2. 统计该行ID_links列表的元素数量,若元素数大于1则计数器加1
  3. 将计数器数值除以DataFrame总行数得到占比

如何使用Python(Pandas)和Spark实现上述逻辑?

实现方案

一、Python(Pandas)实现

利用Pandas矢量化操作替代手动遍历,效率更高:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'ID': [0, 1, 2, 3, 4],
    'ID_links': [[10], [11,12,13], [14,15], [16], [17,18,19,20]]
})

# 统计符合条件的ID数量
qualified_count = (df['ID_links'].apply(len) > 1).sum()

# 计算占比
total_count = len(df)
percentage = (qualified_count / total_count) * 100

print(f"符合条件的ID总数:{qualified_count}")
print(f"占总ID的百分比:{percentage:.2f}%")

说明:

  • apply(len)批量获取每个列表的长度,生成布尔序列标记是否符合条件
  • sum()直接统计布尔序列中True的数量,即符合条件的ID数
  • 用总行数做除法得到占比,再转为百分比格式展示

二、Spark实现

利用Spark内置函数处理数组长度,适配大数据场景:

from pyspark.sql import SparkSession
from pyspark.sql.functions import size, col

# 初始化SparkSession
spark = SparkSession.builder.appName("CountQualifiedIDs").getOrCreate()

# 构造示例DataFrame
data = [
    (0, [10]),
    (1, [11,12,13]),
    (2, [14,15]),
    (3, [16]),
    (4, [17,18,19,20])
]
df = spark.createDataFrame(data, schema=["ID", "ID_links"])

# 计算符合条件的ID数量和总ID数
qualified_count = df.filter(size(col("ID_links")) > 1).count()
total_count = df.count()

# 计算占比
percentage = (qualified_count / total_count) * 100

print(f"符合条件的ID总数:{qualified_count}")
print(f"占总ID的百分比:{percentage:.2f}%")

# 关闭SparkSession
spark.stop()

说明:

  • size()函数直接获取数组列的长度,无需自定义UDF
  • filter()筛选出长度大于1的行,count()得到符合条件的ID数量
  • 总ID数通过df.count()获取,占比计算逻辑与Pandas一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:15:34