如何一次性为pandas DataFrame的MultiIndex列设置新的一级索引列
解决方案
有两种非常简便的一步实现方式,无需多步操作或循环:
方法1:利用pd.concat的keys参数(最推荐)
pd.concat自带的keys参数可以直接为拼接的DataFrame新增一级列索引,一行完成操作:
df = pd.concat([df, df_type3], axis=1, keys=['type3'], names=df.columns.names)
参数说明:
keys=['type3']:自动为df_type3的所有列添加上层索引type3names=df.columns.names:直接复用原DataFrame的MultiIndex命名,保持列索引格式统一
方法2:类单级列的直接赋值写法
如果想要和单级索引df['new_col'] = xxx风格一致的赋值写法,可以配合层级切片实现:
df.loc[:, ('type3', slice(None))] = df_type3
元组('type3', slice(None))指代一级索引为type3、二级索引任意的所有列,pandas会自动匹配df_type3的列与二级索引对应赋值,无需提前构造MultiIndex。
之前的尝试2失败是因为语法问题:变量名多写了下划线,且多层索引的通配不能直接在元组内写
:,需要用slice(None)或者pd.IndexSlice对象代替。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

