如何为含列表的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
相关产品推荐
相关产品推荐

