Тема: Трансформация данных: создание строк из значений total
в DataFrame
Привет всем,
Столкнулся с задачей трансформации DataFrame для задачи логистической регрессии. У меня есть следующий DataFrame:
df = pd.DataFrame({"group": ["A", "B"], "total": [3, 5], "occurrence": [2, 1]})
Я хочу трансформировать его таким образом, чтобы получить по одной строке на каждый элемент значения total
. Конкретно мне нужно создать 5 + 6 строк, где occurrence
строк будет содержать значение 1
, а остальные 0
. Это может быть либо в существующем столбце occurrence
, либо в новом столбце target
.
Сейчас я выполняю этот процесс итеративно, но он слишком медленный на больших объемах данных:
expanded = []
for ix, row in df.iterrows():
for i in range(row["total"]):
row["y"] = 1 if i < row["occurrence"] else 0
expanded.append(row.copy())
df_out = pd.DataFrame(expanded).reset_index(drop=True)
df_out.drop(["total", "occurrence"], axis=1, inplace=True)
print(df_out)
Результат должен выглядеть так:
group y
0 A 1
1 A 1
2 A 0
3 B 1
4 B 0
5 B 0
6 B 0
7 B 0
Как можно было бы оптимизировать эту трансформацию, чтобы она выполнялась быстрее на больших данных? Возможно, есть методы, удобные для работы с pandas, которые я упустил из виду. Буду признателен за любую помощь!
Заранее спасибо за ваши идеи!