如何将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
相关产品推荐
相关产品推荐

