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

如何在匹配DataFrame高频cat1值时返回对应cat0与cat2数据

高效获取DataFrame中高频词汇对应列数据的解决方案

核心思路

先预处理DataFrame,构建cat1到(cat0, cat2)的映射字典,利用字典O(1)的查询性能,避免二次遍历DataFrame或合并数据产生重复项。

具体实现

1. 预处理构建映射字典

先对原DataFrame去重,确保每个cat1仅对应唯一的cat0和cat2组合(若cat1重复但对应列值一致,去重不影响结果;若存在多对应关系,可按需调整逻辑):

import pandas as pd

# 示例DataFrame
A = pd.DataFrame({
    'cat0': ['a0', 'a0', 'b0', 'c0'],
    'cat1': ['x', 'x', 'y', 'z'],
    'cat2': ['a2', 'a2', 'b2', 'c2']
})

# 构建映射:cat1 -> (cat0, cat2),保留每个cat1的首个有效组合
cat1_map = A.drop_duplicates(subset='cat1').set_index('cat1').apply(
    lambda row: (row['cat0'], row['cat2']), axis=1
).to_dict()

2. 结合subject_findall生成结果

调用subject_findall得到高频词汇后,直接从字典中取值组合成目标元组:

# 假设subject_findall返回最频繁的cat1词汇,如'x'
subject = subject_findall(your_input_text)
# 生成目标元组
result_tuple = (subject,) + cat1_map[subject]

特殊情况处理

若同一个cat1对应不同的cat0/cat2组合,可通过聚合逻辑(如取众数)确定对应关系:

from scipy.stats import mode

def get_most_common(x):
    return mode(x, keepdims=False)[0]

# 按cat1分组,取cat0和cat2的众数作为对应值
cat1_map = A.groupby('cat1').agg({
    'cat0': get_most_common,
    'cat2': get_most_common
}).apply(tuple, axis=1).to_dict()

性能优势

  • 预处理仅需一次遍历DataFrame,时间复杂度O(n)
  • 字典查询为O(1),远快于二次查询DataFrame的O(n)
  • 提前去重避免了外部合并产生的无效重复项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:22:22