объединить pandas фреймы данных с объектами - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь объединить 3 pandas фреймов данных по ключу 'id', но как-то не могу получить правильный результат.

В конце я хочу фрейм данных с 2 строками, один с id ' ab c 'и объекты (что-то, 1), (что-то1,1) и строка с идентификатором' def 'с object2 (что-то, 1) и объекты (что-то, 1). Есть ли способ добиться этого с помощью pandas?

import pandas as pd
df1 = pd.DataFrame([[]])
df1['id'] ='abc'
df1['object'] = -1
df1['object'] = df1['object'].astype('object')
df1.at[0,'object'] = ('something', 1)
df1['object3'] = -1
df1['object3'] = df1['object3'].astype('object')
df1.at[0,'object3'] = ('something1', 1)

df2 = pd.DataFrame([[]])
df2['id'] ='def'
df2['object2'] = -1
df2['object2'] = df2['object2'].astype('object')
df2.at[0,'object2'] = ('something2', 1)


df3 = pd.DataFrame([[]])
df3['id'] ='def'
df3['object3'] = -1
df3['object3'] = df3['object3'].astype('object')
df3.at[0,'object3'] = ('something3', 1)

edit:

Извините, мой оригинальный вопрос не был ясен: я хотел бы, чтобы в конце кадр данных выглядел следующим образом:

| id  | object          | object2          | object3          |
|-----|-----------------|------------------|------------------|
| abc | ('something',1) | None             | ('something1',1) |
| def | None            | ('something2',1) | ('something3',1) |

1 Ответ

1 голос
/ 30 апреля 2020

concat и groupby

Используйте first для устранения потенциальной неединственности. Это довольно надежно.

pd.concat([df1, df2, df3]).groupby('id', as_index=False).first()

    id          object          object3          object2
0  abc  (something, 1)  (something1, 1)              NaN
1  def             NaN  (something3, 1)  (something2, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...