[英]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
尝试级联,但不确定是否正确的方法吗? 有任何想法吗 ?
使用join
与DataFrame.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_index
, join
和last set_index
具有append=True
, append=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.