В этом примере у меня есть три столбца: «Время DayOfWeek» и «Риск».
Я хочу сгруппировать по «DayOfWeek», взять только первый элемент и назначить ему высокий риск. Это означает, что первый известный час дня недели представляет собой самый высокий риск. Остальное инициализируется как «Низкий» риск.
В pandas у меня был дополнительный столбец для индекса, но в полярах его нет. Я мог бы создать его искусственно, но нужно ли это вообще?
Могу ли я сделать это как-нибудь умнее с помощью поляров?
df['risk'] = "Low"
df = df.sort('Time')
df.loc[df.groupby("DayOfWeek").head(1).index, "risk"] = "High"
В этом случае индекс уникален и переходит в диапазон (n)
Кстати, вот мое решение. (Мне это не очень нравится)
df = df.with_columns(pl.int_range(df.shape[0]).alias('pseudo_index')
# find lowest time for day
indexes_df = df.sort('Time').group_by('DayOfWeek').head(1)
# Set 'High' as col for all rows from group_by
indexes_df = indexes_df.select('pseudo_index').with_columns(pl.lit('High').alias('risk'))
# Left join will generate null values for all values that are not in indexes_df 'pseudo_index'
df = df.join(indexes_df, how='left', on='pseudo_index').select(
pl.exclude('pseudo_index', 'risk'), pl.col('risk').fill_null(pl.lit('low'))
)
Подробнее здесь: https://stackoverflow.com/questions/726 ... assign-val