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

如何高效实现Pandas DataFrame列内字典的取整与排序?

高效处理Pandas DataFrame中嵌套集合的数值格式化与排序

针对你的需求,我们可以用Pandas的apply方法结合自定义函数来高效处理整个score列,完全不需要手动写for循环,代码简洁且性能更优。

完整解决方案代码

import pandas as pd

# 初始化原始DataFrame
languages = ['en','cs','es']
counties = ['us','ch','sp']
count = [32, 432,43]
a = {('p', 0.25937605905953339), ('q', 0.2001602214732502)}
b = {('r', 0.5937605905953339), ('4', 0.12001602214732502)}
c = {('l', 0.35337605905953339), ('r', 0.42001602214732502)}
score =[a, b, c]
df1 = pd.DataFrame({'language': languages,'county': counties, 'count' : count, 'score': score})

# 定义处理单个score元素的函数
def process_score(score_set):
    # 1. 遍历集合,将分数保留四位小数
    formatted_items = [(name, round(score, 4)) for name, score in score_set]
    # 2. 按分数升序排序
    sorted_items = sorted(formatted_items, key=lambda x: x[1])
    # 3. 返回集合(如果需要保持顺序,改为返回sorted_items列表即可)
    return set(sorted_items)

# 批量应用函数到整个score列
df1['score'] = df1['score'].apply(process_score)

# 查看结果
print(df1)

关键细节说明

  1. 为什么用apply而不是for循环?
    Pandas的apply方法内部做了性能优化,比手动遍历DataFrame行的for循环效率更高,尤其是数据量较大时,性能差距会更明显。

  2. 关于集合的无序性
    注意Python的集合是无序的,所以即使我们排序后转成集合,后续显示时顺序可能会有变化。如果需要严格保持排序后的顺序,建议把函数的返回值改成列表:

    return sorted_items
    

    此时score列会变成有序列表,显示结果会完全匹配你期望的排序顺序。

  3. 代码逻辑拆解

    • 用列表推导式快速遍历集合元素,将分数四舍五入到四位小数;
    • sorted函数通过key=lambda x: x[1]指定按元组的第二个元素(分数)进行升序排序;
    • apply自动遍历score列的每个元素,应用处理函数并更新列值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:04:07