如何基于表头和列值合并两个数据框?

3
我有两个数据框。第一个包含不同城市的数据。
dfTmp:
    City        2005    2007    
0   London       3       7
1   Paris        2       0  

我有一个空的数据框,需要填充它。

dfData:
    City        Year        
0   London      2005     
1   London      2007     
2   Paris       2005         
3   Paris       2007     

我希望合并这两个数据集。然后,dfData 应该变成如下所示。
dfData:
    City        Year    Value   
0   London      2005     3
1   London      2007     7  
2   Paris       2005     2      
3   Paris       2007     0
2个回答

4

您不需要第二个数据框dfData。所有所需数据都在dfTmp中。您只需要使用以下方式重塑dfTmp:

选项1

使用set_indexstack

dfData = dftmp.rename_axis('Year', 1).set_index('City').stack().reset_index(name='Value')

print(dfData)

输出:

     City  Year  Value
0  London  2005      3
1  London  2007      7
2   Paris  2005      2
3   Paris  2007      0

选项2

使用melt

dfData = dftmp.melt(id_vars='City', var_name='Year', value_name='Value')

print(dfData)

输出:

     City  Year  Value
0  London  2005      3
1   Paris  2005      2
2  London  2007      7
3   Paris  2007      0

0
上述解决方案 - 仅使用 dfTmp 避免合并 - 看起来是最优的。
如果您坚持使用 Merge,可以执行以下操作:
首先确保导入了 Pandas 包:
import pandas as pd

我们有以下数据:
Tmp = {'City': ['London', 'Paris'],
    '2005': [3,2],
   '2007': [7,0]}
dfTmp = pd.DataFrame(data, columns = ['City', '2005', '2007'])

并且:

data = {'City': ['London', 'London', 'Paris', 'Paris'],
    'Year': [2005,2007, 2005, 2007]}
dfData = pd.DataFrame(data, columns = ['City', 'Year'])

然后在 Pandas 中使用 Merge:

dfNew = pd.merge(dfData, dfTmp)
dfNew.iloc[0:4,0:3]

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