Дублирование строк Pandas в зависимости от значений в столбце датафрейма

В сегодняшней статье мы разберем, как продублировать строки датафрейма определенное число раз (разное количество, исходя из значений в каждой из строк).

В качестве датафрейма возьмем небольшую таблицу:

pandas duplicate rows
import pandas as pd
df = pd.DataFrame([[1, 'Bob', 'Builder', 3],
                    [2,'Sally','Baker',3],
                    [3,'Scott', 'Stick Maker', 2]],
columns=['id','name', 'occupation', 'count'])

Необходимо продублировать строки столько раз, сколько указано в столбце ‘count’. Для этого воспользуемся функцией loc.

Благодаря этой функции мы можем получить доступ к значениям данных, помещенным в определенную строку или столбец, на основе индекса, переданного в функцию. В качестве индекса передадим диапазон индексов в таблице, который будем повторять через функцию repeat то количество раз, которое указано в столбце ‘count’. А также сбросим индексы после этого, чтобы они не дублировались.

Выглядеть это будет следующим образом:

df.loc[df.index.repeat(df['count'])].reset_index(drop=True)
pandas duplicate rows

Решить такую задачку можно еще одним способом.

В качестве исходных данных у нас будет тот же датафрейм, нужно только импортировать библиотеку numpy.

import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 'Bob', 'Builder', 3],
                    [2,'Sally','Baker',3],
                    [3,'Scott', 'Stick Maker', 2]],
columns=['id','name', 'occupation', 'count'])

Теперь создадим еще один датафрейм, воспользовавшись функцией repeat библиотеки numpy. В качестве первого аргумента функции передадим значения исходного датафрейма, в качестве второго – значения столбца ‘count’, и третьим аргументом укажем 1, в качестве оси.

Выглядеть это будет следующим образом:

pd.DataFrame(np.repeat(df.values, df['count'].values, axis=0),columns=['id','name', 'occupation', 'count'])
pandas duplicate rows

Спасибо за внимание, надеюсь эти способы помогут вам в работе с Pandas!

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий