如何为pandas dataframe列中每个唯一值添加重复的月份行?
实现方案
pandas可以直接实现该需求,最便捷的方式是使用笛卡尔积合并:
import pandas as pd # 原始数据框 df1 = pd.DataFrame({'Part':['Wheel', 'Door', 'Light', 'Seatbelt']}) # 定义待匹配的月份列表 month_list = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August'] # 方法1:cross合并(pandas 1.2.0及以上版本支持,代码最简洁) df2 = df1.merge(pd.DataFrame({'Month': month_list}), how='cross')
如果使用的是更低版本的pandas,可通过多级索引方式兼容实现:
# 方法2:低版本pandas兼容实现 parts = df1['Part'].unique() # 生成Part和月份的笛卡尔积索引 full_index = pd.MultiIndex.from_product([parts, month_list], names=['Part', 'Month']) # 转换为目标数据框 df2 = full_index.to_frame(index=False)
后续合并补充
你后续要补全0值展示的需求,可以直接用上面得到的df2作为左表,左连接你的业务统计数据框,再对数值列执行.fillna(0),就能实现所有Part+月份的组合完整展示、缺失值自动补0的效果。
内容的提问来源于stack exchange,提问作者Elliott Davey
相关产品推荐
相关产品推荐

