правильный способ заменить значение NaN из другого фрейма данных при совпадении столбцов в пандах

1

Я новичок в pandas и пытаюсь заменить значение столбца (NaN) в df1 на df2 со значением столбца. И перед следующей ошибкой.

df1
unique_col  |  Measure
944537          NaN
7811403         NaN 
8901242114307     1 

df2
unique_col  |  Measure
944537           18
7811403          12 
8901242114307    17.5



df1.loc[(df1.unique_col.isin(df2.unique_col) &
                       df1.Measure.isnull()), ['Measure']] = df2[['Measure']]

У меня есть два блока данных с 3 миллионами записей и при выполнении ниже операции, столкнувшись со следующей ошибкой:

ValueError: не может переиндексироваться с дублирующей оси

Теги:
pandas
numpy

1 ответ

4
Лучший ответ

Вы можете легко заполнить nans - использовать функцию fillna. В вашем случае, если у вас есть dfs as (обратите внимание на индексы)

    unique_col      Measure
0   944537          NaN
1   7811403         NaN
2   8901242114307   1.0


    unique_col      Measure
0   944537          18.0
1   7811403         12.0
2   8901242114307   17.5

Вы можете просто

>>> df.fillna(df2)


    unique_col       Measure
0   944537           18.0
1   7811403          12.0
2   8901242114307    1.0

Если индексы не совпадают с указанными выше, вы можете установить их одинаковыми и использовать одну и ту же функцию

df = df.set_index('unique_col')
df.fillna(df2.set_index('unique_col'))
  • 0
    если у нас будут разные формы, это будет работать? Означает несколько столбцов
  • 1
    Это работает, 1 upvote

Ещё вопросы

Сообщество Overcoder
Наверх
Меню