如何将单行YTD数据追加到未堆叠的多级索引Pandas DataFrame
报错原因
你遇到的InvalidIndexError错误由两个问题共同导致:
- 你用来计算YTD行的代码逻辑错误:当前
dfHubR2Imonthallshops是按月分组得到的多行结果,索引为月份数值,和主表dfHubR2I的索引重复,拼接时触发索引冲突 - 主表与待拼接的单行数据列名、结构未对齐,你需要的YTD是年初到当前月的整体中位数,而非按月分组的结果
解决方案
按照下面的步骤处理即可得到目标结构:
- 先计算正确的YTD单行数据,对齐主表的列结构和数据格式
# 计算各门店YTD中位数 ytd_shop_median = dfHubPV2.loc[ (dfHubPV2['Ind'].dt.year == year) & (dfHubPV2['Ind'].dt.month < date.month) # 匹配你之前取到date.month-1的筛选逻辑 , :].groupby('SHOP_CODE')['R2I'].median().fillna('-') # 计算全店YTD中位数 ytd_all_median = dfHubPV2.loc[ (dfHubPV2['Ind'].dt.year == year) & (dfHubPV2['Ind'].dt.month < date.month) , 'R2I'].median() # 转成单行DataFrame,设置索引为YTD,补充全店列,对齐主表结构 ytd_row = ytd_shop_median.to_frame().T ytd_row['All Shops'] = ytd_all_median ytd_row.index = ['YTD']
- 直接拼接主表和YTD行即可
df_final = pd.concat([dfHubR2I, ytd_row], axis=0)
注意事项
请统一列名大小写,避免主表的All Shops和待拼接数据的All shops大小写不一致导致列数据错位。
内容的提问来源于stack exchange,提问作者Rachel Porter
相关产品推荐
相关产品推荐

