簡體   English   中英

熊貓多索引數據框條件列合並

[英]pandas multiindex dataframe conditional columns concatanation

我有2個多索引數據框

df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
                'Unit': [ 'USD', 'EUR', 'EUR'],
                  'Location': [ 'Hawai', 'Torino', 'Paris'],
                  '2000': [666, 888,777],
                    '2002': [44,55,66]
                   })
df2.set_index(['Country','Unit','Location'],inplace=True)

df3 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
                'Unit': [ 'USD', 'EUR', 'EUR'],
                  '2018': [666, 888,777]
                   })
df3.set_index(['Country','Unit'],inplace=True)  
                       2000  2002
Country Unit Location            
US      USD  Hawai      666    44
IT      EUR  Torino     888    55
FR      EUR  Paris      777    66
              2018
Country Unit      
US      USD    666
IT      EUR    888
FR      EUR    777  

我想有一個thid列的數據框結果,其值僅是EUR,另一個應該保持空白,如下所示

                      2000  2002 2018
Country Unit Location                 
US      USD  Hawai      666    44     
IT      EUR  Torino     888    55  888
FR      EUR  Paris      777    66  777  

嘗試級聯,但不確定是否正確的方法嗎? 有任何想法嗎 ?

使用joinDataFrame.xs的選擇由第二級MultiIndex

df = df2.join(df3.xs('EUR', level=1, drop_level=False))
print (df)
                       2000  2002   2018
Country Unit Location                   
US      USD  Hawai      666    44    NaN
IT      EUR  Torino     888    55  888.0
FR      EUR  Paris      777    66  777.0

詳情:

print (df3.xs('EUR', level=1, drop_level=False))
              2018
Country Unit      
IT      EUR    888
FR      EUR    777

pandas 0.22.0工作的解決方案-通過reset_indexjoin和last set_index具有append=Trueappend=True DataFrame的級別轉換為兩個DataFrame相同數量級別的列,以避免丟棄原始索引值:

df = (df2.reset_index(level=2)
         .join(df3.xs('EUR', level=1, drop_level=False))
         .set_index('Location', append=True))
print (df)
                       2000  2002   2018
Country Unit Location                   
US      USD  Hawai      666    44    NaN
IT      EUR  Torino     888    55  888.0
FR      EUR  Paris      777    66  777.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM