【问题标题】:Merge multiple data frames into a single data frame in python在python中将多个数据帧合并为一个数据帧
【发布时间】:2020-03-03 17:51:40
【问题描述】:

我有 4 个数据框,如下所示

df = pd.DataFrame({_id:[1,2,3,4], name:[Charan, Kumar, Nikhil, Kumar], })

df1 = pd.DataFrame({_id:[1,3,4], count_of_apple:[5,3,1]})


df2 = pd.DataFrame({_id:[1,2,3], count_of_organge:[8,4,6]})


df3 = pd.DataFrame({_id:[2,3,4], count_of_lime:[7,9,2]})

我想把所有的数据框合并成一个叫做final的数据框

我曾尝试使用 PD.merge,但问题是我必须执行 3 次不同的操作,是否有更简单的方法?

我使用下面的代码得到结果

final = pd.merge(df, df1, on='_id', how='left')


final = pd.merge(final, df2, on='_id', how='left')


final = pd.merge(final, df3, on='_id', how='left')

我希望最终结果是这样的

final.head()

_id |姓名 |橙色计数| 高分辨率照片| CLIPARTO苹果计数|石灰计数

1 |查兰 | 5 | 8 |钠

2 |库马尔 |钠 | 4 | 7

3 |尼基尔 | 3 | 6 | 9

4 |库马尔 | 1 |钠 | 2

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    您可以使用concat,但首先必须将_id 转换为DataFrame.set_index 对每个DataFrame 的索引:

    dfs = [df, df1, df2, df3]
    
    df = pd.concat([x.set_index('_id') for x in dfs], axis=1).reset_index()
    

    有什么相似之处:

    df = df.set_index('_id')
    df1 = df1.set_index('_id')
    df2 = df2.set_index('_id')
    df3 = df3.set_index('_id')
    
    df = pd.concat([df, df1, df2, df3], axis=1).reset_index()
    

    print (df)
       _id    name  count_of_apple  count_of_organge  count_of_lime
    0    1  Charan             5.0               8.0            NaN
    1    2   Kumar             NaN               4.0            7.0
    2    3  Nikhil             3.0               6.0            9.0
    3    4   Kumar             1.0               NaN            2.0
    

    【讨论】:

      【解决方案2】:

      来自文档https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

      In [1]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
         ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
         ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
         ...:                     'D': ['D0', 'D1', 'D2', 'D3']},
         ...:                    index=[0, 1, 2, 3])
         ...:
      
      In [8]: df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
         ...:                     'D': ['D2', 'D3', 'D6', 'D7'],
         ...:                     'F': ['F2', 'F3', 'F6', 'F7']},
         ...:                    index=[2, 3, 6, 7])
         ...: 
      
      In [9]: result = pd.concat([df1, df4], axis=1, sort=False)
      

      输出:

      【讨论】:

      • 你需要提供索引列,所以在每个数据框中你需要设置像df.set_index('_id')这样的索引,然后它就可以工作了。
      猜你喜欢
      • 1970-01-01
      • 2020-07-26
      • 2016-01-31
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2022-07-20
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多