【问题标题】:adding a new column to data frame向数据框添加新列
【发布时间】:2018-10-09 07:49:33
【问题描述】:

我正在尝试做一些在 pandas 中应该非常简单的事情,但似乎不是。我有两个大数据框

df1 有 243 列,其中包括:

   ID2  K.   C  type
1  123  1.   2.   T
2  132  3.   1.   N
3  111  2.   1.   U

df2 有 121 列,其中包括:

   ID3  A    B   
1  123  0.   3.   
2  111  2.   3.   
3  132  1.   2. 

df2 包含关于同一 ID (ID2=ID3) 但顺序不同的不同信息

我想在 df2 中创建一个名为 (type) 的新列,并匹配 df1 中的 type 列。如果它与 df1 中的 ID 相同,则应从 df1 复制相同的类型(T、N 或 U)。换句话说,我需要它看起来像下面的数据框但是with all 121 columns from df2+type

ID3   A    B  type
123  0.   3.   T
111  2.   3.   U
132  1.   2.   N

我试过了

pd.merge 和 pd.join。

我也试过了

df2['type'] = df1['ID2'].map(df2.set_index('ID3')['type'])

但它们都不起作用。 它显示 KeyError: 'ID3'

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

    据我所知,您的最后一个命令几乎是正确的。试试这个:

    df2['type'] = df2['ID3'].map(df1.set_index('ID2')['type'])
    

    【讨论】:

    • 非常感谢。你救了我。我已经尝试了三个多小时了。再次感谢您。
    • @user9715239 你应该接受这个答案。
    • @user9715239,很高兴听到这个消息!还有 Ami,感谢您鼓励 SO 礼仪 :)
    【解决方案2】:

    join

    df2.join(df1.set_index('ID2')['type'], on='ID3')
    
       ID3    A    B type
    1  123  0.0  3.0    T
    2  111  2.0  3.0    U
    3  132  1.0  2.0    N
    

    merge(取1)

    df2.merge(df1[['ID2', 'type']].rename(columns={'ID2': 'ID3'}))
    
       ID3    A    B type
    0  123  0.0  3.0    T
    1  111  2.0  3.0    U
    2  132  1.0  2.0    N
    

    merge(拍2张)

    df2.merge(df1[['ID2', 'type']], left_on='ID3', right_on='ID2').drop('ID2', 1)
    
       ID3    A    B type
    0  123  0.0  3.0    T
    1  111  2.0  3.0    U
    2  132  1.0  2.0    N
    

    mapassign

    df2.assign(type=df2.ID3.map(dict(zip(df1.ID2, df1['type']))))
    
       ID3    A    B type
    0  123  0.0  3.0    T
    1  111  2.0  3.0    U
    2  132  1.0  2.0    N
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2020-02-24
      • 2020-11-08
      • 1970-01-01
      • 2018-02-09
      • 2022-12-18
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多