向数据框添加新列

时间:2018-04-28 18:29:03

标签: pandas dataframe

我尝试做一些在熊猫中应该非常简单的事情,但它似乎没有。我有两个大型数据框

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'

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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