![](/img/trans.png)
[英]Creating a new dataframe from a multi index dataframe using some conditions
[英]How to insert new rows in a multi index dataframe from a reference dataframe
我已經看過幾篇關於這個的帖子,但我無法理解如何使用另一個數據幀進行合並、連接和連接。 如何參考另一個數據幀 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
用:
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
根據@ansev 提供的上述數據,這是另一種方式(如果dispatch_no
不是索引,則使用df2=df2.set_index('dispatch_no')
):
c=df1.index.get_level_values(0).unique() #['2019-12-2', '2019-12-3']
m=pd.concat([df2]*len(c)) #multiply the df to the length of c
idx=pd.MultiIndex.from_product([c,df2.index]) #create a multiindex
m.index=idx #assign to m and finally reindex
然后使用combine_first()
final=df1.reindex(idx).combine_first(m.rename(columns=dict(zip(m.columns,df1.columns))))
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-3 1 d1 e1 f1
2 M2 N2 O2
3 d3 e3 f3
4 M4 N4 O4
5 M5 N5 O5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.