Как применить условие if в GPU DataFramecDF для фильтрации DataFrame?
Я хотел бы отфильтровать фрейм данных cuDF на основе значения столбца, а затем создать новый столбец на основе указанного условия. В принципе, как я могу применить следующее в cuDF?
df.loc[df.column_name condition, 'new column name'] = 'value if condition is met'
3 ответа
Решение
Даны Панды в cuDF
# value to be replaced in series
value = 'value if condition is met'
# condition to qualify for replacement
mask = df.column_name condition
# https://docs.rapids.ai/api/cudf/stable/
df['new column name'] = df.masked_assign(value, mask)
Прикладной пример
"""explanation:
>> if there is no pool, pool_sqft should be 0
"""
# value to be replaced in series
value = 0
# condition to qualify for replacement
mask = df_train['pool_count']==0
# https://docs.rapids.ai/api/cudf/stable/
df['pool_sqft'] = df.masked_assign(value, mask)
Пока masked_assign
работает для определенных условий, applymap
синтаксически лучше и функционально похож на Pandas API.
Кроме того, @ Ashwin-Srinath упоминает, что __setitem()__
выйдет релиз 0.9, так что вы просто сможете сделать df[condition] = value
, masked_assign
может уйти в пользу просто __setitem()__
как masked_assign
не является функцией Pandas API.
Вы также можете использовать .query()
Пример:
expr = "(a == 2) or (b == 3)"
filtered_df = df.query(expr)
где a
а также b
являются именами столбцов в кадре данных.