我试图将两个数据表与不同的索引长度连接起来--一个是多个索引,另一个是int类型的范围索引。我需要加入另一个索引要短得多的表,必要时让行重复,然后用NAN替换,就像在sql中用左联接进行复制一样。
我有以下生产数据表:
-------------------------------
Month Plant Product Production
-------------------------------
1 A AFS 11,212
TF1 9,005
AA1 21,656
B AA1 11,512
POD 6,550
2 A AFS 12,550
TF1 12,121
AA1 15,091
B AA1 16,212
POD 7,890及以下每月价格预测数据:
-------------------------------
Month Product Forecast Price
-------------------------------
1 AFS 0.91
AA1 6.66
TF1 11.90
POD 21.80
ZBR 0.61
TPO 0.88
2 AFS 1.12
AA1 7.42
TF1 12.56我想要最后的表格如下:
----------------------------------------------
Month Plant Product Production Forecast Price
----------------------------------------------
1 A AFS 11,212 0.91
TF1 9,005 11.90
AA1 21,656 6.66
B AA1 11,512 1.12
POD 6,550 etc
2 A AFS 12,550
TF1 12,121
AA1 15,091
B AA1 16,212
POD 7,890我试过用
pd.concat([df, fcast_df], join='inner', axis=0)和df.merge(fcast_df, left_index=True, right_on='Product')
第一个选项没有产生任何结果,而第二个选项不幸的不是我所追求的结果,因为它没有考虑到第一个数据both的多重索引,即在月份和产品上连接。
任何帮助都非常感谢
发布于 2020-03-03 12:10:33
您可以将MultiIndex转换为列,并使用merge和左联接:
df1 = df.reset_index().merge(fcast_df, on=['Month','Product'], how='left')
print (df1)
Month Plant Product Production Forecast Price
0 1 A AFS 11,212 0.91
1 1 A TF1 9,005 11.90
2 1 A AA1 21,656 6.66
3 1 B AA1 11,512 6.66
4 1 B POD 6,550 21.80
5 2 A AFS 12,550 1.12
6 2 A TF1 12,121 12.56
7 2 A AA1 15,091 7.42
8 2 B AA1 16,212 7.42
9 2 B POD 7,890 NaN设置
print (df)
Production
Month Plant Product
1 A AFS 11,212
TF1 9,005
AA1 21,656
B AA1 11,512
POD 6,550
2 A AFS 12,550
TF1 12,121
AA1 15,091
B AA1 16,212
POD 7,890
print (fcast_df)
Month Product Forecast Price
0 1 AFS 0.91
1 1 AA1 6.66
2 1 TF1 11.90
3 1 POD 21.80
4 1 ZBR 0.61
5 1 TPO 0.88
6 2 AFS 1.12
7 2 AA1 7.42
8 2 TF1 12.56如果两个MultiIndex中的DataFrames都使用:
df1 = df.reset_index().merge(fcast_df.reset_index(), on=['Month','Product'], how='left')https://stackoverflow.com/questions/60506828
复制相似问题