замена одного столбца другим столбцом, но без пропущенного значения

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных

 name g1 g2
a    1  1
a    0  na
a    1  3
b    1  na
b    2  na
b    3  4
c    4  na
  

Я хочу переместить значения g2 в g1, не перемещая na
возвращаемые столбцы должны быть

 name g1 g2
a    1  1
a    0  na
a    3  3
b    1  na
b    2  na
b    4  4
c    4  na
  

Я использовал df.replace(g1, g2), , но это также приведет к перемещению NA. Есть ли кто-нибудь, кто не перемещает NA

Ответ №1:

Вы можете использовать notna для проверки:

 df.loc[df['g2'].notna(), 'g1'] = df['g2']
  

Ответ №2:

Это один из подходов:

 data = [['a', '1', '1'], ['a', '0', np.nan], ['a', '1', '3'], ['b', '1', np.nan],
        ['b', '2', np.nan], ['b', '3', '4'], ['c', '4', np.nan]]

df = pd.DataFrame(data, columns=['name', 'g1', 'g2'])
df['g1'] = df['g2'].fillna(df['g1'])
print(df)
  

Вывод:

   name g1   g2
0    a  1    1
1    a  0  NaN
2    a  3    3
3    b  1  NaN
4    b  2  NaN
5    b  4    4
6    c  4  NaN