#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть фрейм данных Pandas со столбцами ниже:
id start end
1 101 101
2 102 104
3 108 109
Я хочу заполнить пробелы между началом и концом дополнительными строками, чтобы результат мог выглядеть следующим образом:
id number
1 101
2 102
2 103
2 104
3 108
3 109
Есть ли способ сделать это в Pandas? Спасибо.
Ответ №1:
Используйте понимание вложенного списка с помощью range
и выравнивание для списка кортежей, в последний раз используйте DataFrame
конструктор:
zipped = zip(df['id'], df['start'], df['end'])
df = pd.DataFrame([(i, y) for i, s, e in zipped for y in range(s, e 1)],
columns=['id','number'])
print (df)
id number
0 1 101
1 2 102
2 2 103
3 2 104
4 3 108
5 3 109
Ответ №2:
Вот чисто pandas-решение, но с точки зрения производительности решение @jaezrael было бы лучше,
df.set_index('id').apply(lambda x: pd.Series(np.arange(x.start, x.end 1)), axis = 1)
.stack().astype(int).reset_index()
.drop('level_1', 1)
.rename(columns = {0:'Number'})
id Number
0 1 101
1 2 102
2 2 103
3 2 104
4 3 108
5 3 109