Pandas数据框合并列名和列值

3

我有两个数据框

df = pd.DataFrame({'Location': [ 'Hawai', 'Torino', 'Paris'],
                  'Time': [2000, 2001,2002],
                    'Value': [1.2, 2.2,3.4]
                   })
df.set_index(['Location','Time'],inplace=True)


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)  

它会生成这个:
               Value
Location Time       
Hawai    2000    1.2
Torino   2001    2.2
Paris    2002    3.4
                       2000  2002
Country Unit Location            
US      USD  Hawai      666    44
IT      EUR  Torino     888    55
FR      EUR  Paris      777    66  

我需要将它们合并,例如针对每个国家/单位/位置,将每个列与第一个数据框中相应的值相乘(给定位置和时间)
因此,结果应该如下所示:

                       2000  2002
Country Unit Location            
US      USD  Hawai      799.2    149.6
IT      EUR  Torino     1065.6    187
FR      EUR  Paris      932.4    224.4  

我卡在这里了,谢谢您的帮助


你打算如何“合并”这些值? - Maximilian Burszley
所以你想合并数据框并将数据框1中的“Value”乘以数据框2中相应的年份列? - Error - Syntactical Remorse
是的,确切地说。这里的挑战在于根据列名进行合并。 - Crovish
1个回答

2

Doing with unstack then mul

df2.columns=df2.columns.astype(int)
s=df.Value.unstack(fill_value=1)
df2.mul(s)
Out[675]: 
                        2000  2001   2002
Country Unit Location                    
US      USD  Hawai     799.2   NaN   44.0
IT      EUR  Torino    888.0   NaN   55.0
FR      EUR  Paris     777.0   NaN  224.4

根据下面的评论

最初的回答:

df2.mul(df.Value.reset_index('Location',drop=True))
Out[683]: 
                         2000  2001   2002
Country Unit Location                     
US      USD  Hawai      799.2   NaN  149.6
IT      EUR  Torino    1065.6   NaN  187.0
FR      EUR  Paris      932.4   NaN  224.4

@Error-SyntacticalRemorse 我的数字显示为799.2,而他没有托里诺2000年的数据,所以我们应该保持不变吗? - BENY
根据他的示例,他也在使用2000年的1.2值来计算都灵和巴黎。(1.2)x(888)=1065.6和(1.2)x(777)=932.4。 - Error - Syntactical Remorse
@Crovish df2.mul(s).dropna(axis=1,thresh =1) => df2.mul(s).dropna(axis=1, thresh=1) - BENY
非常高效。谢谢 Wen.Ben - Crovish
@Crovish 没问题 :-) 祝你编程愉快 - BENY
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接