我尝试做一些在熊猫中应该非常简单的事情,但它似乎没有。我有两个大型数据框
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'
答案 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
map
和assign
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