Чтобы дать вам пример, я хотел бы выполнить следующую операцию в полярах.
Для примера данных со столбцом a, имеющим 1 и 2, мы хотим создать столбец b, который:
- Истинно, если 1 в столбце a.
- Имеет то же количество значений True, что и количество единиц в столбце a для 2 в столбце a. Это своего рода стратификация. Строки, которые получают значение True, должны быть случайными.
- Остальные строки в b имеют значение False.
Код: Выделить всё
import polars as pl
import numpy as np
df = pl.DataFrame({
'a': [2, 2, 2, 1, 2, 1]
})
df
Код: Выделить всё
shape: (6, 1)
┌─────┐
│ a │
│ --- │
│ i64 │
╞═════╡
│ 2 │
│ 2 │
│ 2 │
│ 1 │
│ 2 │
│ 1 │
└─────┘
Код: Выделить всё
df_pd = df.to_pandas()
n = df_pd.shape[0]
n_1 = df_pd['a'].value_counts()[1]
n_2 = n - n_1
df_pd['b'] = False
df_pd.loc[df_pd['a'] == 1, 'b'] = True
idx = df_pd.loc[df_pd['a'] == 2].index[np.random.choice(n_2, n_1, replace=False)]
df_pd.loc[idx, "b"] = True
df_pd
Код: Выделить всё
a b
0 2 False
1 2 True
2 2 False
3 1 True
4 2 True
5 1 True
Подробнее здесь: https://stackoverflow.com/questions/725 ... -in-polars