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

如何基于指定优先级规则从DataFrame中提取最优type与value键值对

实现方案(推荐)

无需中转字典,直接通过排序+分组取首行即可实现规则,逻辑清晰且不会丢失同type的多值场景:

  1. 给type列映射优先级权重,优先级越高数值越大
  2. 按分组键、优先级、value降序排序,每个分组的第一行即为符合规则的最优结果
  3. 分组取首行输出结果即可
import pandas as pd

# 定义type优先级映射
type_prio = {'t': 3, 'o': 2, 'f': 1}
merged_df['type_prio'] = merged_df['type'].map(type_prio)

# 排序:先按分组键,再按type优先级降序,同优先级按value降序
sorted_df = merged_df.sort_values(
    by=['name', 'time', 'type_prio', 'value'],
    ascending=[True, True, False, False]
)

# 每个(name, time)分组取第一行即为所需结果
res = sorted_df.groupby(['name', 'time'], as_index=False).first()[['name', 'time', 'type', 'value']]

基于你现有字典结果的处理方案

如果要基于你已经生成的含字典的grp对象处理,可以用自定义函数提取最优键值对:

注意:你之前生成字典的逻辑存在缺陷,如果同一个type在同一个分组下出现多个value,转字典时会被后面的value覆盖,无法正确执行「同type取最大value」的规则,因此更推荐使用第一种方案。

def extract_best(kv_dict):
    # 按优先级顺序遍历type,找到第一个存在的type即可返回
    for t in ['t', 'o', 'f']:
        if t in kv_dict:
            return pd.Series([t, kv_dict[t]], index=['type', 'value'])
    return pd.Series([None, None], index=['type', 'value'])

# 应用函数生成结果
grp[['type', 'value']] = grp.iloc[:, -1].apply(extract_best)
res = grp[['name', 'time', 'type', 'value']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:03