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

如何从DataFrame键值对列提取值大于500的键及全局最大值对应键

问题解决方法

报错原因分析

  • 你调用iterrows时遗漏了括号(),iterrows是方法不是属性,必须加()才能正确获取迭代对象,这是你代码报错的核心原因
  • 原有拆分逻辑没有统一处理键值两侧的空格,极端场景下会出现拆分错误,单个键值对用,拆分不会触发错误,不是问题根源

最优实现方案

优先用pandas向量化的apply操作替代显式iterrows循环,性能更高也更符合Python/pandas的代码风格,完整实现如下:

import pandas as pd

# 模拟你的原始DataFrame,实际使用时替换为你自己的df即可
df = pd.DataFrame({
    'Frequency': [
        'PM : 100, AM : 587',
        'GH : 257, PM : 675, JK : 843',
        'AM : 54 , JK : 754, GH : 100, PO : 86',
        'MN : 567',
        'PM : 1023',
        'ML : 200'
    ]
})

# 单行频率字符串解析函数
def parse_frequency(freq_str):
    # 拆分所有键值对并去除冗余空格
    item_list = [item.strip() for item in freq_str.split(',')]
    freq_dict = {}
    for item in item_list:
        key, val = item.split(':')
        freq_dict[key.strip()] = int(val.strip())
    return freq_dict

# 解析Frequency列为字典格式
df['freq_dict'] = df['Frequency'].apply(parse_frequency)

# 需求1:提取所有值大于500的键值对
df['filtered_pairs'] = df['freq_dict'].apply(lambda x: {k:v for k,v in x.items() if v > 500})

# 需求2:统计全局最大值及对应键
all_pairs = {}
for d in df['freq_dict']:
    all_pairs.update(d)
max_value = max(all_pairs.values())
max_keys = [k for k,v in all_pairs.items() if v == max_value]

# 输出结果
print("每行大于500的键值对:")
print(df['filtered_pairs'].tolist())
print(f"\n全局最大值:{max_value},对应的键:{max_keys}")

补充说明

如果你坚持要用iterrows的写法,修正后的可用版本如下:

all_pairs = {}
filtered_result = []
for i, row in df.iterrows():
    freq_str = row['Frequency']
    item_list = [item.strip() for item in freq_str.split(',')]
    freq_dict = {}
    for item in item_list:
        key, val = item.split(':')
        freq_dict[key.strip()] = int(val.strip())
    # 过滤大于500的键值对
    filtered = {k:v for k,v in freq_dict.items() if v>500}
    filtered_result.append(filtered)
    all_pairs.update(freq_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:33:00