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

如何为含列表的pd.DataFrame列生成每行的最常见值列?

提取DataFrame每行列表中的最常见值(含多个众数)

先构造你的示例DataFrame:

import pandas as pd
df = pd.DataFrame({
    'col_1': [[1, 2, 3, 3], [2, 2, 8, 8, 7], [3, 4]]
})

自定义函数实现需求

用collections.Counter统计每行列表的元素频次,筛选出所有出现次数最多的元素:

from collections import Counter

def get_most_common(lst):
    count_result = Counter(lst)
    max_frequency = max(count_result.values())
    # 收集所有频次等于最高频次的元素
    return [item for item, freq in count_result.items() if freq == max_frequency]

应用函数生成新列

把自定义函数通过apply作用到col_1列,生成col_2:

df['col_2'] = df['col_1'].apply(get_most_common)

执行后得到的结果和你的期望一致:

col_1      col_2
0   [1, 2, 3, 3]        [3]
1  [2, 2, 8, 8, 7]  [2, 8]
2        [3, 4]     [3, 4]

为什么之前的方法失效

  • statistics.mode:这个函数在列表存在多个众数时会抛出StatisticsError,且只能返回单个众数,不符合保留多个众数的需求;
  • pandas自带的mode方法:是对整个列计算众数(即找列中出现次数最多的列表),并非对每行的列表单独处理,所以无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:50:36