Python 熊猫多索引数据帧条件列关联

Python 熊猫多索引数据帧条件列关联,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个多索引数据帧 df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'], 'Unit': [ 'USD', 'EUR', 'EUR'], 'Location': [ 'Hawai', 'Torino', 'Paris'], '2000': [666, 888,777], '2002': [44,55,6

我有两个多索引数据帧

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  
尝试了串联,但不确定是否正确?有什么想法吗?

与用于按第二级
多索引选择:

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
0.22.0
中工作的解决方案-转换3。对于数据帧中相同级别数的列,多重索引的级别由,
join
和最后使用
append=True
避免删除原始索引值:

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
用于按第二级
多索引进行选择

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
0.22.0
中工作的解决方案-转换3。对于数据帧中相同级别数的列,多重索引的级别由,
join
和最后使用
append=True
避免删除原始索引值:

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

事实上,我已经尝试过了,但是得到了一个异常返回NotImplementedError:在多索引上合并多个级别重叠是不可能的implemented@Crovish-它在pandas 0.24.1中工作,你能升级吗?我必须使用pandas 0.22.0。你知道如何在那里工作吗?@Crovish-how-working
df=df2。reset_index(level=2)。join(df3.xs('EUR',level=1,drop_level=False))。set_index('Location',append=True)
?@Crovish-Super,你也能接受这个解决方案吗?谢谢。事实上,我已经试过了,但是得到了一个异常返回NotImplementedError:在多索引上合并多个级别重叠是不可能的implemented@Crovish-它在pandas 0.24.1中工作,你能升级吗?我必须使用pandas 0.22.0。你知道如何在那里工作吗?@Crovish-how-working
df=df2。reset_index(level=2)。join(df3.xs('EUR',level=1,drop_level=False))。set_index('Location',append=True)
?@Crovish-Super,你也能接受这个解决方案吗?谢谢