如何按长度对存储DataFrame的字典排序以解决合并时数据量缩减问题
多DataFrame合并实现方案
1. 按行数排序实现
直接用Python内置的sorted函数即可对字典中的DataFrame按行数排序,排序规则通过key参数指定,reverse参数控制升/降序:
reverse=True:降序排序,行数最多的DataFrame排在列表首位reverse=False:升序排序,行数最少的DataFrame排在列表首位
排序代码示例:
# 按行数降序排序 sorted_dfs = sorted(example_dict.values(), key=lambda df: len(df), reverse=True)
2. 合并逻辑实现
排序后选择对应连接方式即可避免小体量DataFrame过滤掉大量数据的问题:
- 如果采用降序排序,以第一个最长的DataFrame为基准,后续全部使用左连接合并,可完整保留最长DataFrame的所有id
- 如果采用升序排序,最后一个是最长的DataFrame,后续全部使用右连接合并即可
完整可运行代码示例:
import pandas as pd from functools import reduce # 按行数降序排序 sorted_dfs = sorted(example_dict.values(), key=lambda df: len(df), reverse=True) # 批量左连接合并 master_merged_dfs = reduce( lambda left_df, right_df: pd.merge(left_df, right_df, on="id", how="left"), sorted_dfs )
补充说明
如果你需要保留所有DataFrame中出现过的全部id,不需要提前排序,直接将连接方式改为how='outer'即可:
from functools import partial merged_dfs = partial(pd.merge, on='id', how='outer') master_merged_dfs = reduce(merged_dfs, example_dict.values())
内容的提问来源于stack exchange,提问作者tkxgoogle
相关产品推荐
相关产品推荐

