如何用Python按4个国家12个月生成48个指定格式的DataFrame
批量生成国家-月份组合的DataFrame解决方案
现有onlineretail数据集,包含InvoiceNo、Description、Country、Month列,涉及的国家列表:
countries = ["France", "USA", "Mexico", "Brazil"]
涉及的月份列表:
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]
需要生成48个对应国家+月份组合的DataFrame,每个DataFrame的处理逻辑为筛选对应国家和月份的数据,再按InvoiceNo和Description分组求和、转置并填充空值。以下是两种实现方式:
方法一:用字典存储(推荐)
这种方式避免命名空间混乱,便于统一管理和调用:
# 定义国家和月份列表 countries = ["France", "USA", "Mexico", "Brazil"] months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sep", "Oct", "Nov", "Dec"] # 初始化字典存储所有组合的DataFrame data_dict = {} for country in countries: for month in months: # 生成字典键名,格式为"Data_国家_月份" key = f"Data_{country}_{month}" # 执行数据处理逻辑 processed_df = onlineretail[(onlineretail.Country == country) & (onlineretail.Month == month)]\ .groupby(['InvoiceNo', 'Description'])['Quantity'].sum().unstack().reset_index().fillna(0)\ .set_index('InvoiceNo') # 将结果存入字典 data_dict[key] = processed_df
调用示例:data_dict["Data_France_Jan"]即可获取对应组合的DataFrame。
方法二:生成独立全局变量
如果需要直接生成如Data_France_Jan的独立变量,可通过修改全局命名空间实现:
countries = ["France", "USA", "Mexico", "Brazil"] months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Sep", "Oct", "Nov", "Dec"] for country in countries: for month in months: # 生成变量名 var_name = f"Data_{country}_{month}" # 执行数据处理逻辑 processed_df = onlineretail[(onlineretail.Country == country) & (onlineretail.Month == month)]\ .groupby(['InvoiceNo', 'Description'])['Quantity'].sum().unstack().reset_index().fillna(0)\ .set_index('InvoiceNo') # 将变量注入全局命名空间 globals()[var_name] = processed_df
运行后直接输入Data_France_Jan即可调用对应DataFrame。
注意事项
- 方法二适合临时调试场景,但大量独立变量会增加代码维护难度,优先推荐使用字典存储。
- 若数据集规模较大,生成48个DataFrame会占用较多内存,建议按需生成或优化数据处理逻辑。
内容的提问来源于stack exchange,提问作者P.t
相关产品推荐
相关产品推荐

