【问题标题】:How to merge two dataframes based on header and columns values?如何根据标题和列值合并两个数据框?
【发布时间】:2018-03-03 01:19:28
【问题描述】:

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

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

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    上面给出的解决方案 - 仅使用 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]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-01-13
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 2020-09-04
        • 2018-08-13
        • 2021-11-20
        相关资源
        最近更新 更多