首页 > 解决方案 > 如何从参考数据帧在多索引数据帧中插入新行

问题描述

我已经看过几篇关于此的帖子,但我无法理解如何使用另一个数据框进行合并、连接和连接。如何参考另一个数据框 d2 填充初始 df1 [多索引数据框]。并填写每个级别的 df1 中不存在的所有行。

df1

date      dispatch_no  A   B   C
2019-12-2   1          a1  b1  c1
            2          a2  b2  c2
            5          a5  b5  c5
2019-12-2   1          d1  e1  f1
            3          d3  e3  f3

参考数据框 d2

dispatch_no  M   N   O  
1            M1  N1  O1
2            M2  N2  O2
3            M3  N3  O3             
4            M4  N4  O4
5            M5  N5  O5

预期产出

date      dispatch_no  A   B   C
2019-12-2   1          a1  b1  c1
            2          a2  b2  c2
            3          M3  N3  O3  
            4          M4  N4  O4
            5          a5  b5  c5
2019-12-2   1          d1  e1  f1
            2          M2  N2  O2
            3          d3  e3  f3
            4          M4  N4  O4
            5          M5  N5  O5

标签: pythonpandasdataframemergemulti-index

解决方案


采用:

df1_unstack=df1.unstack('date')
new_df=( df1_unstack.reindex(index=list(range(df1_unstack.index.min(),
                                     df1_unstack.index.max()+1)))
           .stack(dropna=False)
           .swaplevel()
           .sort_index())

df_fill=df2.set_index('dispatch_no')
df_fill.columns=new_df.columns
new_df=new_df.fillna(df_fill)

print(new_df)


                        A   B   C
date      dispatch_no            
2019-12-2 1            a1  b1  c1
          2            a2  b2  c2
          3            M3  N3  O3
          4            M4  N4  O4
          5            a5  b5  c5
2019-12-3 1            d1  e1  f1
          2            M2  N2  O2
          3            d3  e3  f3
          4            M4  N4  O4
          5            M5  N5  O5

数据框

print(df1)

                        A   B   C
date      dispatch_no            
2019-12-2 1            a1  b1  c1
          2            a2  b2  c2
          5            a5  b5  c5
2019-12-3 1            d1  e1  f1
          3            d3  e3  f3

print(df2)
   dispatch_no   M   N   O
0            1  M1  N1  O1
1            2  M2  N2  O2
2            3  M3  N3  O3
3            4  M4  N4  O4
4            5  M5  N5  O5

推荐阅读