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

如何用Python Pandas按日期和设备统计列表类型列的唯一项数量?

使用Pandas按device和date分组统计coverage列的唯一值计数

模拟原始数据

先模拟符合需求的数据集结构:

import pandas as pd

data = {
    'device': ['A', 'A', 'B', 'B'],
    'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    'coverage': [['X', 'Y', 'X'], ['Y', 'Z'], ['X', 'X'], ['Y', 'Z', 'Z']]
}
df = pd.DataFrame(data)

实现步骤与代码

  1. 对每行的coverage列表去重,保留唯一值
  2. 按device和date分组,聚合分组内所有去重后的coverage值
  3. 统计每个分组内各coverage值的出现次数
  4. 将统计结果整理为目标表格格式

具体代码:

# 1. 每行coverage去重
df['unique_coverage'] = df['coverage'].apply(lambda x: list(set(x)))

# 2. 按device和date分组,合并所有唯一coverage值
grouped = df.groupby(['device', 'date'])['unique_coverage'].sum().reset_index()

# 3. 统计分组内各coverage值的计数
grouped['coverage_counts'] = grouped['unique_coverage'].apply(lambda x: pd.Series(x).value_counts().to_dict())

# 4. 转换为目标格式的表格
result = grouped.explode('unique_coverage')
result['count'] = result.apply(lambda row: row['coverage_counts'][row['unique_coverage']], axis=1)
result = result.drop(columns=['unique_coverage', 'coverage_counts']).pivot(index=['device', 'date'], columns='unique_coverage', values='count').fillna(0).astype(int).reset_index()

# 查看结果
print(result)

结果说明

运行代码后会得到和示例输出一致的表格:按device和date分组,每列对应一个coverage唯一值,单元格数值是该值在对应分组内的出现次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:18:18