Развернуть DataFrame по диапазону

1

Необходимо дублировать индекс dataframe от 0 до value в столбце. Есть ли (векторизованный) способ расширения этого df1 на df2? Спасибо

import pandas as pd
df1 = pd.DataFrame(range(3), index=range(3000, 3003))
      0
3000  0
3001  1
3002  2

df2 = ???
      0
3000  0
3001  0
3001  1
3002  0
3002  1
3002  2
Теги:
pandas

1 ответ

3
Лучший ответ

Используйте Index.repeat с GroupBy.cumcount:

df1 = df1.loc[df1.index.repeat(df1[0] + 1)]
df1[0] = df1.groupby(0).cumcount()
print (df1)
      0
3000  0
3001  0
3001  1
3002  0
3002  1
3002  2

Для Series используйте Index.to_series:

s = df1.index.repeat(df1[0] + 1).to_series()
s = s.groupby(s).cumcount()
print (s)
3000    0
3001    0
3001    1
3002    0
3002    1
3002    2
dtype: int64

и DataFrame из Series add Series.to_frame:

df = s.groupby(s).cumcount().to_frame()
print (df)
      0
3000  0
3001  0
3001  1
3002  0
3002  1
3002  2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню