You need to enable JavaScript to run this app. Pandas中统计DataFrame内A列元素全局出现次数并新增列
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中统计DataFrame内A列元素全局出现次数并新增列

实现F列填充的两种可运行方案

方案1:最小改动适配你现有代码

你当前的代码已经能在循环里算出每个A列元素的全局出现次数,缺失的核心步骤是把「元素-出现次数」的对应关系持久化存储,再通过映射关系回填到新列。
修改要点如下:

  • 循环开始前初始化空字典,用来存储每个元素对应的总出现次数
  • 每轮循环计算完单个元素的匹配次数后,把元素值和对应次数存入字典
  • 循环结束后,借助map()函数将字典的映射关系应用到A列,直接生成F列
    修改后的核心循环代码:
# 初始化频次映射字典
count_map = {}
for cell in df['A']:
    m = df.eq(cell).sum()
    dep = m.sum()
    # 存储元素与对应出现次数的映射
    count_map[cell] = dep
# 生成F列
df['F'] = df['A'].map(count_map)

方案2:更高效的向量化写法(推荐)

你现在的实现逻辑每循环一个元素就要遍历整张DataFrame做相等判断,当数据量变大时运行效率会明显下降。可以用Pandas原生的频次统计能力一次性完成全表统计,省去逐元素循环的步骤:

  1. 把整张DataFrame的所有非空单元格值拉平,过滤掉占位符-
  2. 直接用value_counts()生成全表元素的出现频次表
  3. 用A列的值匹配频次表,生成F列
    对应代码片段:
# 保留你之前生成df的全部逻辑,接下面的统计步骤
# 拉平所有非空单元格,替换占位符'-'为缺失值后过滤
all_valid_cells = df.stack().replace('-', np.nan).dropna()
# 统计各元素的全局出现次数
global_counts = all_valid_cells.value_counts()
# 生成F列
df['F'] = df['A'].map(global_counts)

最终输出效果

运行后得到的DataFrame完全匹配你预期的结构:

ABCDEF
a-NaNNaNNaN5
baNaNNaNNaN3
caNaNNaNNaN1
dbaNaNNaN2
edbaNaN1

注意:统计过程会自动跳过占位符-和空值,不会把无意义的占位内容计入元素出现次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 01:15:02