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

如何在Python中对含列表列的DataFrame进行分组统计

问题:统计分组下各Value在不同ID中的出现次数

给定如下DataFrame:

import pandas as pd

l1 = [1,2,3,1,2,3] 
l2 = ['A','A','A','B','B','B'] 
values = [['Ram', 'Ford', 'Honda', 'Ford'],['Ford', 'Toyota', 'Subaru'],['Ford', 'Ram'],['Volvo', 'Honda', 'Ford'],['Honda', 'Ford', 'Toyota', 'Ford'],['Ram', 'Ford']] 
d = {'ID': l1, 'Group': l2, 'Values': values} 

df = pd.DataFrame(d)

DataFrame内容如下:

ID   Group  Values
1      A    [Ram, Ford, Honda, Ford]
2      A    [Ford, Toyota, Subaru]
3      A    [Ford, Ram]
1      B    [Volvo, Honda, Ford]
2      B    [Honda, Ford, Toyota, Ford]
3      B    [Ram, Ford]

需要得到每个Group下各Value在不同ID中的出现次数,期望结果:

ID
Group  Value   1   2   3
  A    Ram     1   0   1
  A    Ford    2   1   1
  A    Honda   1   0   0
  A    Toyota  0   1   0
  A    Subaru  0   1   0
  B    Volvo   1   0   0
  B    Honda   1   1   0
  B    Ford    1   2   1
  B    Toyota  0   1   0
  B    Ram     0   0   1

解决方案

可以通过以下步骤实现:

  1. 展开嵌套列表:把Values列中的每个元素拆分成单独行,保留对应的ID和Group信息
  2. 分组统计次数:按Group、Value、ID三级分组,统计每组的出现频次
  3. 重塑宽表结构:将长表转换为宽表,缺失的ID位置填充0,最后调整索引与列层级

完整代码如下:

# 展开嵌套列表,生成每行对应一个Value的DataFrame
df_exploded = df.explode('Values').rename(columns={'Values': 'Value'})

# 分组统计每个(Group, Value, ID)组合的出现次数
count_df = df_exploded.groupby(['Group', 'Value', 'ID']).size().reset_index(name='Count')

# 转换为宽表,缺失值用0填充
result = count_df.pivot_table(
    index=['Group', 'Value'],
    columns='ID',
    values='Count',
    fill_value=0
)

# 调整列名层级显示,匹配期望格式
result.columns.name = 'ID'

print(result)

运行代码后即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:45:42