Подтвердить что ты не робот

Python Pandas заменит NaN в одном столбце значением из соответствующей строки второго столбца

Я работаю с этим Pandas DataFrame в Python 2.7.

File    heat    Farheit Temp_Rating
   1    YesQ    75      N/A
   1    NoR     115     N/A
   1    YesA    63      N/A
   1    NoT     83      41
   1    NoY     100     80
   1    YesZ    56      12
   2    YesQ    111     N/A
   2    NoR     60      N/A
   2    YesA    19      N/A
   2    NoT     106     77
   2    NoY     45      21
   2    YesZ    40      54
   3    YesQ    84      N/A
   3    NoR     67      N/A
   3    YesA    94      N/A
   3    NoT     68      39
   3    NoY     63      46
   3    YesZ    34      81

Мне нужно заменить все NaN в столбце Temp_Rating значением из столбца Farheit.

Это то, что мне нужно:

File        heat    Observation
   1        YesQ    75
   1        NoR     115
   1        YesA    63
   1        YesQ    41
   1        NoR     80
   1        YesA    12
   2        YesQ    111
   2        NoR     60
   2        YesA    19
   2        NoT     77
   2        NoY     21
   2        YesZ    54
   3        YesQ    84
   3        NoR     67
   3        YesA    94
   3        NoT     39
   3        NoY     46
   3        YesZ    81

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

Как я могу найти строки Temp_Rating с помощью NaN и заменить их значением в той же строке столбца Farheit?

4b9b3361

Ответ 1

Предполагая, что ваш DataFrame находится в df:

df.Temp_Rating.fillna(df.Farheit, inplace=True)
del df['Farheit']
df.columns = 'File heat Observations'.split()

Сначала замените значения NaN на соответствующее значение df.Farheit. Удалите столбец 'Farheit'. Затем переименуйте столбцы. Здесь получается результат DataFrame:

resulting DataFrame

Ответ 2

Вышеупомянутые решения не сработали для меня. Метод, который я использовал, был:

df.loc[df['foo'].isnull(),'foo'] = df['bar']

Ответ 3

Другой способ решить эту проблему,

import pandas as pd
import numpy as np

ts_df = pd.DataFrame([[1,"YesQ",75,],[1,"NoR",115,],[1,"NoT",63,13],[2,"YesT",43,71]],columns=['File','heat','Farheit','Temp'])


def fx(x):
    if np.isnan(x['Temp']):
        return x['Farheit']
    else:
        return x['Temp']
print(1,ts_df)
ts_df['Temp']=ts_df.apply(lambda x : fx(x),axis=1)

print(2,ts_df)

возвращает:

(1,    File  heat  Farheit  Temp                                                                                    
0     1  YesQ       75   NaN                                                                                        
1     1   NoR      115   NaN                                                                                        
2     1   NoT       63  13.0                                                                                        
3     2  YesT       43  71.0)                                                                                       
(2,    File  heat  Farheit   Temp                                                                                   
0     1  YesQ       75   75.0                                                                                       
1     1   NoR      115  115.0
2     1   NoT       63   13.0
3     2  YesT       43   71.0)