Как применить условие 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 являются именами столбцов в кадре данных.

Другие вопросы по тегам