Я хочу обновить определенный столбец в определенном диапазоне индексов строк.
Вот чего я хочу добиться в pandas:
Код: Выделить всё
df = pd.DataFrame({ "foo": [0,0,0,0] })
df["foo"].iloc[0:3] = 1
# or
df.iloc[0:3, df.columns.get_loc("foo")] = 1
Как мне выполнить эту, казалось бы, простую операцию в полярах? Кажется, можно обновить одну строку следующим образом:
Код: Выделить всё
df = pl.DataFrame({ "foo": [0,0,0,0] })
df[0, "foo"] = 1
но попытка обновить диапазон не удалась:
Код: Выделить всё
df[0:3, "foo"] = 1
# TypeError: cannot use "slice(0, 3, None)" for indexing
df[0:3]["foo"] = 1
# TypeError: DataFrame object does not support `Series` assignment by index
Рекомендуемый ответ с использованием pl.when(pl.col("row_number").between(...)).then(...) добавляет значительные накладные расходы, которые не должны быть необходимы, учитывая, что номер строки является последовательным, упорядоченным и начинается с 0. В наборе данных с миллионом строк я вижу 20-кратную разницу в производительности между pandas df.iloc[...] = x и текущими полярами решение. Неужели альтернативы нет?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... ific-range