首页 > 解决方案 > 在索引和一列上连接 3 个 pandas 数据帧

问题描述

我想在索引“类型”列上连接 3 个数据帧,其中缺少一些索引值(dfb 和 dfc 具有不完整的索引,而 dfa 具有完整的索引)。当我连接时,一些列会消失,如下所示。(我希望最终数据帧具有 MultiIndex,因此我可以按类型选取连接数据帧的部分,并且 df['type2'] 应该具有排序索引)。

我尝试使用各种参数进行 concat,但它不起作用。

dfa=pd.DataFrame({'type':['type1','type1','type2'],'a':[10,20,30]},index=[1,2,3])
dfb=pd.DataFrame({'type':['type1','type2'],'b':[11,21]},index=[2,3])
dfc=pd.DataFrame({'type':['type3'],'c':[33]},index=[3])
dfa
dfb
dfc

pd.concat([dfa,dfb,dfc],axis=0,keys=['type']) #wrong. columns b and c disappear!

在此处输入图像描述 我想要高效的解决方案,因为我有 5 个数据帧,其中包含 2000 个“类型”,每个数据帧的索引大小约为 10K

想要的: 在此处输入图像描述

所需数据框的示例:

   pd.DataFrame({'a':[10,20,30,np.nan],'b':[np.nan,11,21,np.nan],'c': 
   [np.nan,np.nan,np.nan,33],'type':['type1','type1','type2','type3']},index= 
   [1,2,3,3])

标签: pandas

解决方案


您没有定义足够的键来匹配连接的数据帧数量的问题。

尝试这个:

pd.concat([dfa, dfb, dfc], axis=0, keys=['type_a', 'type_b', 'type_c'])

输出:

             a     b     c   type
type_a 1  10.0   NaN   NaN  type1
       2  20.0   NaN   NaN  type1
       3  30.0   NaN   NaN  type2
type_b 2   NaN  11.0   NaN  type1
       3   NaN  21.0   NaN  type2
type_c 3   NaN   NaN  33.0  type3

或将keys参数全部排除在外:

pd.concat([dfa, dfb, dfc], axis=0)

输出:

      a     b     c   type
1  10.0   NaN   NaN  type1
2  20.0   NaN   NaN  type1
3  30.0   NaN   NaN  type2
2   NaN  11.0   NaN  type1
3   NaN  21.0   NaN  type2
3   NaN   NaN  33.0  type3

推荐阅读