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

Pandas如何遍历dataframe并按多条件拆分生成新dataframe?

实现方案

你需要的多条件全组合拆分DataFrame可以通过以下两种高效方式实现,无需手动编写每条筛选逻辑:


方案一:按目标列直接分组(推荐)

直接使用pandas原生groupby方法按四个目标列分组,自动匹配所有存在数据的条件组合,性能最优:

# 按4个维度分组,groups会自动聚合所有存在的组合对应的行
groups = df.groupby(["Z_year", "Z_month", "Z_group", "time_range"])

# 遍历所有分组处理子DataFrame
for (year, month, group, time_range), sub_df in groups:
    # 示例:将子DataFrame导出为独立文件,空间数据可替换为geopandas的to_file方法
    filename = f"data_{year}_{month}_{group}_{time_range.replace(' ', '_')}.csv"
    sub_df.to_csv(filename, index=False)
    
    # 若需要将所有子DataFrame存入字典后续调用,可提前初始化字典存储:
    # sub_df_dict[(year, month, group, time_range)] = sub_df

该方案的优势:

  • 自动覆盖所有存在数据的组合,无需提前手动枚举所有可能值
  • 底层为pandas优化实现,处理效率远高于手动循环筛选
  • 自动跳过无数据的空组合,避免生成无效空文件

方案二:强制覆盖全枚举组合

如果你需要哪怕某组合无对应数据也要生成对应空文件,可以先枚举所有你列出的唯一值组合再筛选:

from itertools import product

# 定义所有维度的枚举值
year_list = [2020, 2021]
month_list = [5, 8, 11]
group_list = ["weekday", "weekend"]
time_range_list = ["08:00 to 12:00", "12:00 to 18:00", "18:00 to 01:00"]

# 生成所有组合的笛卡尔积
all_combs = product(year_list, month_list, group_list, time_range_list)

for year, month, group, time_range in all_combs:
    # 筛选符合条件的子数据(注意修正你原代码中`df.loc['Z_group']`的错误写法,取列直接用df['列名']即可)
    sub_df = df[(df["Z_year"] == year) &
                (df["Z_month"] == month) &
                (df["Z_group"] == group) &
                (df["time_range"] == time_range)]
    # 导出逻辑同上
    filename = f"data_{year}_{month}_{group}_{time_range.replace(' ', '_')}.csv"
    sub_df.to_csv(filename, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:04