В сегодняшней статье мы разберем, как продублировать строки датафрейма определенное число раз (разное количество, исходя из значений в каждой из строк).
В качестве датафрейма возьмем небольшую таблицу:
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)
Решить такую задачку можно еще одним способом.
В качестве исходных данных у нас будет тот же датафрейм, нужно только импортировать библиотеку 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!