Обновите значения нескольких столбцов на основе условия в python - PullRequest
1 голос
/ 17 февраля 2020

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

ID    00:00  01:00  02:00  ...   23:00   avg_value
22      4.7     5.3     6   ...    8         5.5
37       0      9.2    4.5  ...    11.2      9.2
4469     2      9.8    11   ...    2         6.4

Можно ли использовать np.where для применения условий к нескольким столбцам одновременно? Я хочу обновить значения с 00:00 до 23:00 до 0 и 1. Если значение во время дня больше, чем avg_value, тогда я изменяю его на 1, иначе на 0.

Я знаю, как применить этот метод к одному столбцу.

np.where(df['00:00']>df['avg_value'],1,0)

Могу ли я изменить его на несколько столбцов?

Вывод будет похож на

ID    00:00  01:00  02:00  ...   23:00   avg_value
22      0     1       1    ...      1       5.5
37      0     0       0    ...      1       9.2
4469    0     1       1    ...      0       6.4

1 Ответ

2 голосов
/ 17 февраля 2020

Выберите все столбцы без последнего на DataFrame.iloc, сравните на DataFrame.gt и приведите к integer с, а последнее добавьте столбец avg_value на DataFrame.join:

df = df.iloc[:, :-1].gt(df['avg_value'], axis=0).astype(int).join(df['avg_value'])
print (df)
      00:00  01:00  02:00  23:00  avg_value
ID                                         
22        0      0      1      1        5.5
37        0      0      0      1        9.2
4469      0      1      1      0        6.4

Или используйте DataFrame.pop для столбца извлечения:

s = df.pop('avg_value')
df = df.gt(s, axis=0).astype(int).join(s)
print (df)
      00:00  01:00  02:00  23:00  avg_value
ID                                         
22        0      0      1      1        5.5
37        0      0      0      1        9.2
4469      0      1      1      0        6.4

Поскольку при назначении одинаковым столбцам целые числа преобразуются в числа с плавающей точкой ( это баг):

df.iloc[:, :-1] = df.iloc[:, :-1].gt(df['avg_value'], axis=0).astype(int)
print (df)
      00:00  01:00  02:00  23:00  avg_value
ID                                         
22      0.0    0.0    1.0    1.0        5.5
37      0.0    0.0    0.0    1.0        9.2
4469    0.0    1.0    1.0    0.0        6.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...