Заполняем числа между двумя столбцами во фрейме данных Pandas

#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