добавление нового столбца во фрейм данных - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь сделать что-то, что должно быть действительно простым в пандах, но кажется, что-нибудь, но. У меня есть два больших кадра данных

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 содержит различную информацию об одном и том же идентификаторе (ID2 = ID3), но в другом порядке

Я хотел создать новый столбец в df2 с именем (type) и сопоставить столбец типа в df1. Если это тот же идентификатор, что и в df1, он должен скопировать тот же тип (T, N или U) из df1. Другими словами, мне нужно, чтобы он выглядел как следующий фрейм данных, но 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 голосов
/ 29 апреля 2018

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
0 голосов
/ 28 апреля 2018

Насколько я понимаю, ваша последняя команда почти верна. Попробуйте это:

df2['type'] = df2['ID3'].map(df1.set_index('ID2')['type'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...