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

Python中基于目标值获取温度列的最大共现数值方法

嘿,我明白你的需求了——你有一个带多列温度数据和一列目标值的DataFrame,想针对每个目标值找出温度列里出现次数最多的数值(或者出现次数大于1的),但用crosstab会返回所有组合,太冗余了对吧?尤其是你数据量还很大(数千行+30列温度),得找高效的方法。我来给你几个实用的解决方案:

先准备模拟数据(方便你测试)

首先我们构造一个和你场景匹配的示例DataFrame,你可以直接替换成自己的真实数据:

import pandas as pd
import numpy as np

# 设置随机种子保证结果可复现
np.random.seed(42)
# 定义温度列名称(你实际有30列的话,这里可以扩展)
temp_cols = [f'temp{i}' for i in range(1, 4)]
# 生成模拟数据
df = pd.DataFrame({
    **{col: np.random.randint(10, 30, 100) for col in temp_cols},
    'target': np.random.choice(['A', 'B', 'C'], 100)
})

场景1:按目标值分组,获取每个目标对应的高频温度值

这个方法会针对每个目标值,把该组下所有温度列的数值合并后统计频次,筛选出你需要的结果:

def get_target_top_temps(group, min_occurrence=1):
    # 把当前目标组的所有温度值摊平成一维数组(高效处理多列)
    all_temps = group[temp_cols].values.flatten()
    # 统计每个温度值的出现次数
    temp_count = pd.Series(all_temps).value_counts()
    # 筛选出符合出现次数要求的结果
    filtered = temp_count[temp_count >= min_occurrence]
    
    if filtered.empty:
        return None
    # 两种返回方式选一种:
    return filtered.index[0]  # 返回出现次数最多的单个温度值
    # return filtered.index.tolist()  # 返回所有出现次数>=min_occurrence的温度值列表

# 按target分组应用函数,这里设置min_occurrence=2,即只保留出现次数>1的
result = df.groupby('target').apply(get_target_top_temps, min_occurrence=2)
print(result)

场景2:针对单个特定目标值,获取高频温度值

如果你只需要关注某个特定的目标值(比如目标值为'A'),可以直接筛选后处理,效率更高:

target_value = 'A'
min_occurrence = 2

# 筛选目标值为A的行,提取所有温度列并摊平
target_temps = df[df['target'] == target_value][temp_cols].values.flatten()
# 统计频次
temp_count = pd.Series(target_temps).value_counts()

# 获取结果
top_temp = temp_count.index[0]  # 出现次数最多的温度值
filtered_temps = temp_count[temp_count >= min_occurrence].index.tolist()  # 所有符合次数要求的温度值

print(f"目标值[{target_value}]的最高频温度值:{top_temp}")
print(f"目标值[{target_value}]出现次数≥{min_occurrence}的温度值:{filtered_temps}")

大数据集优化建议

因为你有数千行+30列温度数据,推荐用collections.Counter来替代pandas的value_counts(),在处理大规模数据时速度会更快:

from collections import Counter

def get_top_temps_fast(group, min_occurrence=1):
    all_temps = group[temp_cols].values.flatten()
    # 用Counter统计频次
    temp_counter = Counter(all_temps)
    # 按出现次数降序排序
    sorted_temps = sorted(temp_counter.items(), key=lambda x: x[1], reverse=True)
    # 筛选符合要求的结果
    filtered = [temp for temp, cnt in sorted_temps if cnt >= min_occurrence]
    
    return filtered[0] if filtered else None

# 分组应用高效版函数
result_fast = df.groupby('target').apply(get_top_temps_fast, min_occurrence=2)

这个方法避免了pandas的一些额外开销,处理大数据集时会更顺畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:25:07