Создание новой переменной на основе данных в кадре данных, игнорировать NaN - PullRequest
1 голос
/ 13 июля 2020

У меня есть фрейм данных, подобный приведенному ниже, и я хочу создать новую переменную, которая является 1/0 или True/False, если все доступные оценки в определенных столбцах равны или больше 4.

данные довольно беспорядочные. Некоторые ячейки имеют вид NaN (респондент не ответил), некоторые - пробелы (неправильное форматирование или респондент нажал пробел, возможно?).

ID      Var1 Var2 Var3
id0001  2    NaN  2
id0002  10   3    10
id0003       8    0
id0004  NaN  NaN  NaN
id0005  7    3    7
id0006  NaN  9    9

Я не хочу отбрасывать эти строки с отсутствующим значением, потому что в большинстве из них отсутствует значение. Я не могу просто сделать ячейки NaN и пробелов 0, потому что 0 здесь что-то означает. Я могу легко сделать все ячейки пустого пространства NaN, но я не знаю, как их игнорировать, поскольку тогда у меня есть экземпляры 'str' и 'int', когда я делаю что-то вроде следующего:

scoreoffouroraboveforall = [(df.Var1 >= 4) & (df.Var2 >= 4) & (df.Var3 >= 4)]

Это, наверное, очень просто сделать, но я в растерянности.

1 Ответ

0 голосов
/ 13 июля 2020

Используйте pd.to_numeric с необязательным параметром errors=coerce, чтобы преобразовать каждый столбец с типом Var1, Var2 и Var3 в тип numeri c, затем используйте DataFrame.ge и DataFrame.all вдоль axis=1 для создания логической маски, как требуется, со значениями True/False:

m = df[['Var1', 'Var2', 'Var3']].apply(
    pd.to_numeric, errors='coerce').ge(4).all(axis=1)

Результат:

print(m)
0    False
1    False
2    False
3    False
4    False
5    False
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...