从单个DataFrame生成多组条件筛选的相似DataFrame
问题
现有如下结构的DataFrame:
import pandas as pd data = { 'name': ['a', 'b', 'c', 'b', 'c'], 'x': ['test', 'set', 'set', 'fix', 'set'], 'y': [True, False, True, True, False], 'z': [0, 0, 1, 1, 0] } df = pd.DataFrame(data)
需要为指定的6-7个名称,分别生成三组筛选后的DataFrame:
- 第一组:
name为指定值且x='set' - 第二组:
name为指定值且y=True - 第三组:
name为指定值且z=1
希望避免重复复制子集化代码,实现高效批量处理。
高效批量处理方案
可以通过定义筛选条件模板+循环遍历目标名称的方式实现,用嵌套字典存储结果,方便后续调用:
步骤1:定义目标名称和筛选条件
# 要处理的目标名称列表,替换成你的6-7个名称 target_names = ['b', 'c', 'a'] # 定义筛选条件:键是组名,值是筛选逻辑 filter_conditions = { 'group_x_set': lambda df, name: (df['name'] == name) & (df['x'] == 'set'), 'group_y_true': lambda df, name: (df['name'] == name) & (df['y'] == True), 'group_z_1': lambda df, name: (df['name'] == name) & (df['z'] == 1) }
步骤2:批量生成并存储结果
# 用嵌套字典存储每个名称对应的三组DataFrame result_dict = {} for name in target_names: name_groups = {} for group_name, condition in filter_conditions.items(): # 应用筛选条件并复制,避免视图修改问题 filtered_df = df[condition(df, name)].copy() name_groups[group_name] = filtered_df result_dict[name] = name_groups
步骤3:调用结果
比如要获取名称'c'的第二组数据:
result_dict['c']['group_y_true']
输出结果:
name x y z 2 c set True 1
方案优势
- 只需修改
target_names和filter_conditions即可扩展或调整需求 - 避免重复编写筛选代码,减少冗余
- 结果结构化存储,便于后续批量分析或导出
内容的提问来源于stack exchange,提问作者anonymous_horse
相关产品推荐
相关产品推荐

