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-workingdf=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-workingdf=df2。reset_index(level=2)。join(df3.xs('EUR',level=1,drop_level=False))。set_index('Location',append=True)
?@Crovish-Super,你也能接受这个解决方案吗?谢谢