如何生成含日期、房型等指定迭代值的Pandas DataFrame?
解决方案
不用嵌套循环,利用Pandas的笛卡尔积生成功能可以更高效地实现需求,避免循环中反复修改DataFrame的性能问题。以下是完整实现代码:
import pandas as pd # 定义所有参数 start_date = "2023-08-01" end_date = "2023-09-01" house_types = [1, 2, 3, 4] # 补充6位经纪人,可替换为实际名字 realtors = ["Alex", "Maggie", "Ginger", "Pat", "Sam", "Taylor"] neighborhood = "a" zipcode = "10018" # 生成指定范围的连续日期 dates = pd.date_range(start=start_date, end=end_date, freq="D") # 生成日期、房型、经纪人的全组合(笛卡尔积) full_combinations = pd.MultiIndex.from_product( [dates, house_types, realtors], names=["Date", "House type", "Realtor"] ) # 转换为DataFrame并添加固定列 df = full_combinations.to_frame(index=False) df["Neighborhood"] = neighborhood df["Zipcode"] = zipcode # 调整列顺序以匹配预期格式 df = df[["Date", "House type", "Neighborhood", "Realtor", "Zipcode"]] # 可选:将日期格式化为MM/DD/YY样式(和示例一致) df["Date"] = df["Date"].dt.strftime("%m/%d/%y") # 查看结果 print(df.head(20))
关键说明:
- 高效生成日期:用
pd.date_range替代while循环+append,代码更简洁,处理大范围日期时性能优势明显。 - 笛卡尔积生成组合:
pd.MultiIndex.from_product直接生成所有日期、房型、经纪人的配对组合,完美满足“每个日期对应所有房型与经纪人组合”的需求,无需手动写嵌套循环。 - 固定列赋值:社区和邮编全局唯一,直接给整列赋值即可,无需逐行处理。
运行后,每天会自动生成24行(4种房型×6位经纪人)数据,完全符合需求。
内容的提问来源于stack exchange,提问作者pars1221
相关产品推荐
相关产品推荐

