【问题标题】:Merge daframes of different columns in a for loop在 for 循环中合并不同列的数据框
【发布时间】:2021-05-26 16:24:36
【问题描述】:

我需要将数据框与在 for 循环中创建的不同列连接起来。

所以这是一个简化版本的问题。如图所示,我制作了两个数据框。

  1. 在这个数据框中,我们有 5 列,这些列不连续(缺少 0、2、5 和 7)。
  2. 这里我们有 6 列,不连续(0,6,7 缺失)并且列本身与第一个 df 不完全匹配。

我需要做的是:

  • 第 1 步:创建一个新的 df,其连续列号为 0,1,2,3,4,5,6,7,8。

  • 第2步:添加对应每个列号的df1和df2的行。列号没有值的行应该是nan。

注意:这必须在循环中完成,因为我有数千个数据帧要合并

所以生成的数据框会是这样的:

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:
    # store your dfs in an iterator
    # df_list = [ ... ]
    
    # the columns you want your final df to have
    final_columns = range(9)
    
    # add these columns with value None to your dfs if not there already
    for df in df_list:
        
        for i in final_columns:
            if i not in df1.columns:
                df[i] = None
    
    # merge all of your dfs together
    final_df = pd.concat(df_list, ignore_index=True)
    
    final_df
    

    【讨论】:

      【解决方案2】:

      试试concat + reindex:

      import pandas as pd
      import numpy as np
      
      df1 = pd.DataFrame([[34, 56, 66, 77, 77]], columns=[1, 3, 4, 6, 7])
      
      df2 = pd.DataFrame([[34, 56, 66, 77, 77, 66]], columns=[1, 2, 3, 4, 5, 8])
      
      # Collection of all DataFrames
      dfs = (df1, df2)
      
      # Concat
      new_df = pd.concat(dfs, ignore_index=True).reindex(columns=np.arange(0, 9))
      
      print(new_df)
      

      new_df:

          0   1     2   3   4     5     6     7     8
      0 NaN  34   NaN  56  66   NaN  77.0  77.0   NaN
      1 NaN  34  56.0  66  77  77.0   NaN   NaN  66.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2021-08-01
        • 2021-02-10
        • 2021-09-26
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多