WedX - журнал о программировании и компьютерных науках

Установите для всех значений в одном столбце значение NaN, если соответствующие значения в другом столбце также равны NaN.

Цель состоит в том, чтобы сохранить взаимосвязь между двумя столбцами, установив значение NaN для всех значений из одного столбца в другом столбце.

Имея следующий фрейм данных:

df = pd.DataFrame({'a': [np.nan, 2, np.nan, 4],'b': [11, 12 , 13, 14]})

     a   b
0  NaN  11
1    2  12
2  NaN  13
3    4  14

Поддержание связи между столбцом a и столбцом b, где обновляются все значения NaN, приводит к следующему:

     a    b
0  NaN  NaN
1    2   12
2  NaN  NaN
3    4   14

Один из способов достижения желаемого поведения:

df.b.where(~df.a.isnull(), np.nan)

Есть ли другой способ сохранить такие отношения?


  • Is there any other way.... Что не так с вашим текущим методом? Вы ищете более чистый синтаксис, более эффективное решение или что-то еще? 06.08.2018
  • Более чистый или рекомендуемый способ. 06.08.2018

Ответы:


1

Вы можете использовать mask в NaN строках.

In [366]: df.mask(df.a.isnull())
Out[366]:
     a     b
0  NaN   NaN
1  2.0  12.0
2  NaN   NaN
3  4.0  14.0

Для наличия любых NaN в столбцах используйте df.mask(df.isnull().any(1))

06.08.2018
  • Вы также можете использовать inplace=True для сохранения изменений. 06.08.2018

  • 2

    Использование pd.Series.notnull, чтобы избежать отрицание вашего логического ряда:

    df.b.where(df.a.notnull(), np.nan)
    

    Но на самом деле в вашем существующем решении нет ничего плохого.

    06.08.2018

    3

    Другой будет:

    df.loc[df.a.isnull(), 'b'] = df.a
    

    Не короче, но работает.

    06.08.2018

    4

    Использование dropna с reindex

    df.dropna().reindex(df.index)
    Out[151]: 
         a     b
    0  NaN   NaN
    1  2.0  12.0
    2  NaN   NaN
    3  4.0  14.0
    
    06.08.2018
  • Это решение будет работать только для столбцов, верно? Я хотел бы иметь возможность применить его к одному столбцу или выбранному набору столбцов. 07.08.2018

  • 5

    Используя np.where(),

    df['b'] = np.where(df.a.isnull(), df.a, df.b)
    

    Работает - np.where(условие, [a, b])

    Возврат элементов либо из a, либо из b, в зависимости от condition.

    Выход:

    >>> df
        a       b
    0   NaN     NaN
    1   2.0     12.0
    2   NaN     NaN
    3   4.0     14.0
    
    06.08.2018
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]