如何遍历字典中每第N个元素并合并对应DataFrame?
筛选字典中每第N个DataFrame并合并
方法步骤(Python 3.7+,字典保持插入顺序)
假设你的DataFrame字典名为df_dict,要选取每第3个元素(含第一个):
筛选目标元素
利用enumerate获取字典项的索引,筛选索引满足idx % 3 == 0的项(索引从0开始,对应第1、4、7...个元素):n = 3 # 筛选并创建新字典 new_df_dict = {key: df for idx, (key, df) in enumerate(df_dict.items()) if idx % n == 0}合并DataFrame
使用pandas.concat合并筛选后的DataFrame:import pandas as pd # 合并并重置索引 merged_df = pd.concat(new_df_dict.values(), ignore_index=True) # 可选:保留原字典的键作为来源标识(生成层级索引) merged_df = pd.concat(new_df_dict.values(), keys=new_df_dict.keys(), names=['source_key', 'original_index'])
兼容旧版Python(<3.7,字典无序)
如果你的Python版本低于3.7,字典不保证插入顺序,需要先对键排序再筛选:
n = 3 # 先对字典键排序(根据你的键类型选择合适的排序逻辑) sorted_keys = sorted(df_dict.keys()) # 选取每第3个键 selected_keys = sorted_keys[::n] # 创建新字典 new_df_dict = {key: df_dict[key] for key in selected_keys} # 合并操作同上 merged_df = pd.concat(new_df_dict.values(), ignore_index=True)
说明
- 索引判断逻辑:
idx % n == 0对应从第一个元素开始,每间隔n-1个元素选取一个(比如n=3时,选索引0、3、6...)。 - 如果需要从第k个元素开始选取,只需调整条件为
(idx - k + 1) % n == 0(比如从第2个开始选每3个,条件为(idx -1) %3 ==0)。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

