Объединить кадры данных с отсутствующими данными в одном или другом столбце - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть два кадра данных (df1 и df2), которые я хочу объединить. Существует общий ключ (id) для обоих кадров данных. Оба кадра данных имеют столбцы Feature1 и Feature2. Для каждого идентификатора данные, принадлежащие Feature1, будут либо в df1, либо в df2. То же самое для столбца Feature2.

Я уже пытался объединить эти кадры данных, но вместо того, чтобы получить только два столбца (три с идентификатором) в конечном кадре данных, я получаю Feature1_x и Feature1_y, потому что этораспознает значения np.nan как допустимые значения. Есть ли способ получить только Feature1 и Feature2 без значений np.nan?

dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': [np.nan, 'C', 'E', np.nan, np.nan],
        'Feature2': ['B', np.nan, np.nan, 'H', 'J']}
df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])
dummy_data2 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', np.nan, np.nan, 'G', 'I'],
        'Feature2': [np.nan, 'D', 'F', np.nan, np.nan]}
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])

Я ожидаю просто получить:

dummy_data12 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']}
df12 = pd.DataFrame(dummy_data12, columns = ['id', 'Feature1', 'Feature2'])

1 Ответ

0 голосов
/ 30 сентября 2019

Если значения в id одинаковы в обоих DataFrame с, а также в обоих индексах одинаковы:

df1.update(df2)
print (df1)
  id Feature1 Feature2
0  1        A        B
1  2        C        D
2  3        E        F
3  4        G        H
4  5        I        J

Если не уверены, что возможное решение - DataFrame.combine_first сустановить индекс по столбцу id в обоих:

df = df1.set_index('id').combine_first(df2.set_index('id')).reset_index()
print (df)
  id Feature1 Feature2
0  1        A        B
1  2        C        D
2  3        E        F
3  4        G        H
4  5        I        J
...