Как заменить значения строк в определенном столбце с помощью индекса?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть следующие фреймы данных,

фрейм данных- 1 (с именем df1)

 index   A   B   C
1       q   a   w
2       e   d   q
3       r   f   r
4       t   g   t
5       y   j   o
6       i   k   p
7       j   w   k
8       i   o   u
9       a   p   v
10      o   l   a
  

фрейм данных- 2 (с именем df2)

 index   C
3       a
7       b
9       c
10      d
  

Я попытался заменить строки для определенных индексов в столбце «C», используя фрейм данных — 2 для фрейма данных — 1, но после использования приведенного ниже кода я получил следующий результат:

 df1['C'] = df2
  

Вывод:

 index   A   B   C
1       q   a   NaN
2       e   d   NaN
3       r   f   a
4       t   g   NaN
5       y   j   NaN
6       i   k   NaN
7       j   w   b
8       i   o   NaN
9       a   p   c
10      o   l   d
  

Но я хочу что-то вроде этого,

Ожидаемый результат:

 index   A   B   C
1       q   a   w
2       e   d   q
3       r   f   a
4       t   g   t
5       y   j   o
6       i   k   p
7       j   w   b
8       i   o   u
9       a   p   c
10      o   l   d
  

Очевидно, что мне не нужны значения NaN в столбце «C», вместо этого я хочу, чтобы значения оставались такими, какие они есть. (Я имею в виду, что оно должно меняться только для этого конкретного значения индекса).

Пожалуйста, дайте мне знать решение.

Заранее спасибо!

Комментарии:

1. это index индекс или просто обычный столбец?

2. Это не столбец, я использовал его для указания значений индекса.

Ответ №1:

Предполагая index , что это фактический столбец индекса, мы можем сделать loc :

 df1.loc[df2.index, 'C'] = df2['C']
  

Или еще проще с:

 df1.update(df2)
  

Вывод:

        A  B  C
index         
1      q  a  w
2      e  d  q
3      r  f  a
4      t  g  t
5      y  j  o
6      i  k  p
7      j  w  b
8      i  o  u
9      a  p  c
10     o  l  d
  

Ответ №2:

Попробуйте это

 for idx, row in df2.iterrows():
    df1.at[idx, 'C'] = row['C']