如何根据标题和列值合并两个数据帧?

时间:2017-09-21 15:45:03

标签: python pandas dataframe merge

我有两个数据帧。第一个包含不同城市的数据。

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 个答案:

答案 0 :(得分:3)

您不需要第二个数据帧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

答案 1 :(得分: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]