【问题标题】:compare 2 dataframe and add columns in order if not exist比较 2 个数据框并按顺序添加列(如果不存在)
【发布时间】:2019-04-30 09:51:17
【问题描述】:

我有 2 个数据框。 df_A - 这是一个模板数据框,它按顺序具有特定数量的列。

例如:[emp_id、first_name、last_name、age、gender、dept]

df_B - 这是一个数据框,可能包含也可能不包含 df_A 的所有列。

例如:[emp_id, first_name, last_name, age,dept] = [ 001, john, mathew, 32, 047]

我想比较 df_B 和 df_A 来创建一个新的数据框 [001, john, mathew, None, 047] 列名与 df_A 相同。

我正在使用 python 3。我尝试使用

col_diff = df_A.columns.difference(df_B) 

获取“性别”列。然后将其转换为列表

col_diff.tolist() 

并将其添加到 df_B。但是这一列被添加到 df_B 的末尾,我得到了

[001,约翰,马修,047,无]

但我想保留与 df_A 相同的列顺序。

输出应该是: [001,约翰,马修,无,047]

你能帮忙吗?感谢您的宝贵时间。

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    数据:

    c1 = ['emp_id', 'first_name', 'last_name', 'age', 'gender', 'dept']
    df_A = pd.DataFrame(columns=c1)
    print (df_A)
    Empty DataFrame
    Columns: [emp_id, first_name, last_name, age, gender, dept]
    Index: []
    
    c2 = ['emp_id', 'first_name', 'last_name', 'age', 'dept']
    df_B = pd.DataFrame([[ '001', 'john', 'mathew', 32, '047']], columns=c2)
    print (df_B)
      emp_id first_name last_name  age dept
    0    001       john    mathew   32  047
    

    首先通过difference获取列的差异,然后assigndict.fromkeys创建的新列,最后用于相同的排序使用reindex

    col_diff = df_A.columns.difference(df_B.columns) 
    print (col_diff)
    Index(['gender'], dtype='object')
    
    df = df_B.assign(**dict.fromkeys(col_diff, None)).reindex(columns=df_A.columns)
    print (df)
      emp_id first_name last_name  age gender dept
    0    001       john    mathew   32   None  047
    

    另一种解决方案:

    df = df_B.reindex(columns=df_A.columns)
    print (df)
      emp_id first_name last_name  age  gender dept
    0    001       john    mathew   32     NaN  047
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多