繁体   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