У меня есть набор данных, который был объединен, чтобы заполнить пропущенные значения друг от друга.
Проблема в том, что у меня есть несколько столбцов с отсутствующими данными, которые я хочу теперь заполнить значениями, которые не отсутствуют.
Объединенный набор данных выглядит следующим образом для Вход:
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.
Извините - исправление внесено. Спасибо.
также у вас есть дублированный столбец в выводе, _x и _y одинаковы?
как насчет df.loc[df.isnull().any(axis=1), :] = df.ffill()






давайте сделаем 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'].
@pygo исходный df должен быть float , поэтому я держу его здесь. И это всего лишь частичный df.
@ W-B, хорошо, хорошее решение, +1
почему 2-я последняя строка равна 1, а другая - 10?