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

如何在Rust Polars DataFrame中聚合列表顶部值并关联回原表

解决方案

假设你的measurements DataFrame结构如下(对应你提到的观测列表结构):

import pandas as pd

measurements = pd.DataFrame({
    'reader': ['Alice', 'Bob', 'Alice'],
    'sights': [['deer', 'fox', 'deer', 'rabbit'], ['fox', 'fox', 'bear'], ['rabbit', 'rabbit', 'deer']]
})

实现步骤:

  1. 展开观测列表:用explode()把sights列的列表拆分为每行对应一个动物记录:
exploded = measurements.explode('sights').rename(columns={'sights': 'animal'})
  1. 统计读者的动物观测次数:按reader和animal分组,计算每种动物的观测总数:
counts = exploded.groupby(['reader', 'animal']).size().reset_index(name='sight_count')
  1. 筛选每个读者的前2高频动物:按观测次数降序排序后,取每组前2条记录:
top_sights = counts.sort_values(['reader', 'sight_count'], ascending=[True, False])\
                   .groupby('reader').head(2)
  1. 整理结果并合并回原表:将每个读者的前2动物转为指定格式(比如字典),再合并到原DataFrame:
# 把结果整理成「动物: 观测次数」的字典格式
top_sights_dict = top_sights.groupby('reader')\
                            .apply(lambda x: x.set_index('animal')['sight_count'].to_dict())\
                            .reset_index(name='top_sights')

# 合并回原表,保留所有原始行
measurements = measurements.merge(top_sights_dict, on='reader', how='left')

最终measurements的top_sights字段会存储目标结果,比如Alice的结果为{'deer': 3, 'rabbit': 3},Bob的结果为{'fox': 2, 'bear': 1}。

并列排名处理补充:

如果需要严格处理次数并列的场景(比如同次数动物都算前2),可以用rank()生成排名后筛选:

counts['rank'] = counts.groupby('reader')['sight_count'].rank(ascending=False, method='dense')
top_sights = counts[counts['rank'] <= 2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:57:36