Количество нулей среди нескольких столбцов

Для полноты: в больших векторах вы можете использовать индексы для ускорения работы (мы часто это делаем в симуляциях, где функции обычно выполняются от 1000 до 10000 раз). Но пока это не нужно, просто используйте ifelse. Это читается намного проще.

> set.seed(100)
> x <- runif(1000,1,10)

> system.time(replicate(10000,{
+     y <- ifelse(x < 5,1,2)
+ }))
   user  system elapsed 
   2.56    0.08    2.64 

> system.time(replicate(10000,{
+   y <- rep(2,length(x))
+   y[x < 5]<- 1
+ }))
   user  system elapsed 
   0.48    0.00    0.48 
2
задан Swopnil Shrestha 13 July 2018 в 08:13
поделиться

2 ответа

Использовать, если id - столбец:

df['correct'] = df.iloc[:, 1:].ne(0).all(axis=1)
#alternative solution
#df['correct'] = ~df.iloc[:, 1:].eq(0).any(axis=1)
print (df)
      id  col_1  col_2  col_3  correct
0  'jk3'    1.0    1.0    NaN     True
1  'kp2'    1.0    1.0    1.0     True
2  'po0'    0.0    1.0    0.0    False
3  'in6'    NaN    0.0    1.0    False
4  'ml5'    1.0    NaN    0.0    False
5  'lj3'    1.0    0.0    NaN    False

Подробности:

Сначала удалите все столбцы без первого с помощью iloc :

print (df.iloc[:, 1:])
   col_1  col_2  col_3
0    1.0    1.0    NaN
1    1.0    1.0    1.0
2    0.0    1.0    0.0
3    NaN    0.0    1.0
4    1.0    NaN    0.0
5    1.0    0.0    NaN

Сравнение не равно ne :

print (df.iloc[:, 1:].ne(0))
   col_1  col_2  col_3
0   True   True   True
1   True   True   True
2  False   True  False
3   True  False   True
4   True   True  False
5   True  False   True

Последняя проверка all True s для строк:

print (df.iloc[:, 1:].ne(0).all(axis=1))
0     True
1     True
2    False
3    False
4    False
5    False
dtype: bool

И если id является индексом:

df['correct'] = df.ne(0).all(axis=1)
print (df)
       col_1  col_2  col_3  correct
id                                 
'jk3'    1.0    1.0    NaN     True
'kp2'    1.0    1.0    1.0     True
'po0'    0.0    1.0    0.0    False
'in6'    NaN    0.0    1.0    False
'ml5'    1.0    NaN    0.0    False
'lj3'    1.0    0.0    NaN    False
1
ответ дан jezrael 17 August 2018 в 13:22
поделиться

Проверьте df.count (), он дает ненулевой счет кадра данных, тогда вы можете назначить его true / false по своему усмотрению.

0
ответ дан SudipM 17 August 2018 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: