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

在Pandas DataFrame中实现3/5多数投票生成Voting列

为DataFrame添加基于行内多数投票的新列

问题背景

需要为包含int64类型元素的DataFrame创建Voting新列,规则如下:

  • 对每行元素统计出现次数,若某元素出现3次及以上,则Voting列填充该元素
  • 若没有元素达到3次出现次数,则填充-1

输入DataFrame

Column1  Column2 Column3 Column4 Column5
0     0       0       6       1       0
1     4       4       6       4       0
2     4       2       2       2       2
3     4       4       4       4       4
4     0       0       0       2       4
5     6       6       6       6       6
6     3       3       3       3       5
7     0       6       6       0       4
8     3       3       3       3       4
9     2       2       4       3       3

期望输出

Column1  Column2 Column3 Column4 Column5  Voting
0     0       0       6       1       0        0
1     4       4       6       4       0        4
2     4       2       2       2       2        2
3     4       4       4       4       4        4
4     0       0       0       2       4        0
5     6       6       6       6       6        6
6     3       3       3       3       5        3
7     0       6       6       0       4       -1
8     3       3       3       3       4        3
9     2       2       4       3       3       -1

解决方案

使用pandas的行级处理功能,结合元素频率统计实现需求,提供两种实现方式:

方式一:自定义函数实现(可读性强)

import pandas as pd

# 构造输入DataFrame
df = pd.DataFrame({
    'Column1': [0,4,4,4,0,6,3,0,3,2],
    'Column2': [0,4,2,4,0,6,3,6,3,2],
    'Column3': [6,6,2,4,0,6,3,6,3,4],
    'Column4': [1,4,2,4,2,6,3,0,3,3],
    'Column5': [0,0,2,4,4,6,5,4,4,3]
})

def calculate_vote(row):
    # 统计每行各元素的出现次数
    element_counts = row.value_counts()
    # 筛选出现次数≥3的元素
    qualified_elements = element_counts[element_counts >= 3]
    # 返回结果:有符合条件的元素则取第一个,否则返回-1
    return qualified_elements.index[0] if not qualified_elements.empty else -1

# 应用函数到每行,生成Voting列
df['Voting'] = df.apply(calculate_vote, axis=1)

# 查看结果
print(df)

方式二:Lambda表达式简化写法

import pandas as pd

df = pd.DataFrame({
    'Column1': [0,4,4,4,0,6,3,0,3,2],
    'Column2': [0,4,2,4,0,6,3,6,3,2],
    'Column3': [6,6,2,4,0,6,3,6,3,4],
    'Column4': [1,4,2,4,2,6,3,0,3,3],
    'Column5': [0,0,2,4,4,6,5,4,4,3]
})

# 一行代码生成Voting列
df['Voting'] = df.apply(
    lambda row: row.mode()[0] if row.value_counts().max() >= 3 else -1,
    axis=1
)

print(df)

代码解释

  1. row.value_counts():对每行元素做频率统计,返回一个Series,索引为元素值,值为对应出现次数
  2. 筛选合格元素:通过element_counts >=3过滤出满足多数投票条件的元素
  3. 结果判断:若存在合格元素则返回第一个(题目场景下每行最多一个合格元素),否则返回-1
  4. df.apply(..., axis=1):将处理逻辑应用到DataFrame的每一行,生成新列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:25:16