Заполнение nan одного столбца значениями другого Python

У меня есть набор данных, который был объединен, чтобы заполнить пропущенные значения друг от друга.

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

Объединенный набор данных выглядит следующим образом для Вход:

Name         State       ID       Number_x      Number_y       Op_x       Op_y
Johnson      AL          1        1             nan            1956       nan
Johnson      AL          1        nan           nan            1956       nan
Johnson      AL          2        1             nan            1999       nan
Johnson      AL          2        0             nan            1999       nan
Debra        AK          1A       0             nan            2000       nan
Debra        AK          1B       nan           20             nan        1997
Debra        AK          2        nan           10             nan        2009
Debra        AK          3        nan           1              nan        2008
.
.

То, что я хотел бы для вывод, это:

Name         State       ID       Number_x      Number_y     Op_x       Op_y
Johnson      AL          1        1             1            1956       1956
Johnson      AL          2        1             1            1999       1999
Johnson      AL          2        0             0            1999       1999
Debra        AK          1A       0             0            2000       2000
Debra        AK          1B       20            20           1997       1997
Debra        AK          2        10            10           2009       2009
Debra        AK          3        1             1            2008       2008
.
.

Поэтому я хочу, чтобы все значения nan были заменены соответствующими значениями в своих столбцах — сопоставьте Number_x с Number_y и Op_x с Op_y.

Следует отметить, что когда есть два одинаковых идентификатора, иногда их значения будут разными; как Johnson с ID = 2, у которого разные номера, но одинаковые значения операций. Я хочу сохранить их, потому что мне нужно больше их исследовать.

Кроме того, если в строке есть два пропущенных значения для Number_x и Number_y, я хочу удалить эту строку — например, Johnson с отсутствием Number_x и Number_y в качестве значения nan.

почему 2-я последняя строка равна 1, а другая - 10?

BENY 21.01.2019 18:01

Извините - исправление внесено. Спасибо.

HelloToEarth 21.01.2019 18:02

также у вас есть дублированный столбец в выводе, _x и _y одинаковы?

BENY 21.01.2019 18:04

как насчет df.loc[df.isnull().any(axis=1), :] = df.ffill()

Karn Kumar 21.01.2019 18:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

давайте сделаем groupby с axis =1

df.groupby(df.columns.str.split('_').str[0],1).first().dropna(subset=['Number','Op'])
   ID     Name  Number      Op State
0   1  Johnson     1.0  1956.0    AL
2   2  Johnson     1.0  1999.0    AL
3   2  Johnson     0.0  1999.0    AL
4  1A    Debra     0.0  2000.0    AK
5  1B    Debra    20.0  1997.0    AK
6   2    Debra    10.0  2009.0    AK
7   3    Debra     1.0  2008.0    AK

astype(int) для ['Number','Op'].

Karn Kumar 21.01.2019 18:06

@pygo исходный df должен быть float , поэтому я держу его здесь. И это всего лишь частичный df.

BENY 21.01.2019 18:08

@ W-B, хорошо, хорошее решение, +1

Karn Kumar 21.01.2019 18:11

Другие вопросы по теме