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

如何将Pandas中两个列表的列表合并为键值对并按值排序?求最优方案

解决方案

直接修改原代码生成排序后的键值对字典

你可以直接在apply的lambda函数里完成筛选、排序和字典转换,一步到位:

import pandas as pd

token_uniqueness_sparse = pd.DataFrame({'token_a': [0.1, 0.0],
                                        'token_b': [0.0, 0.2],
                                        'token_c': [0.3, 0.0]
                                       }
                                      )

# 生成每行的排序后字典
token_uniqueness_dense = token_uniqueness_sparse.apply(
    lambda x: dict(sorted(x[x.ne(0)].items(), key=lambda item: item[1])),
    axis=1
).to_frame('output_column')

print(token_uniqueness_dense)

输出结果:

output_column
0  {'token_a': 0.1, 'token_c': 0.3}
1               {'token_b': 0.2}

更高效的批量处理方案(适合大数据量)

如果你的数据规模较大,逐行apply的效率会偏低,推荐用stack+groupby的批量处理方式:

# 将稀疏表转成长格式,过滤掉0值
melted = token_uniqueness_sparse.stack()[lambda s: s != 0].reset_index()
melted.columns = ['row_idx', 'token', 'value']

# 按行分组生成排序后的字典
token_uniqueness_dense = melted.groupby('row_idx').apply(
    lambda g: dict(sorted(g[['token', 'value']].values, key=lambda x: x[1]))
).to_frame('output_column')

这个方法利用pandas的向量化操作先整合所有有效数据,再按行分组处理,比逐行apply的性能提升明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:29