Как объединить несколько столбцов добавлением снизу?
Есть такой фрейм данных:
Time 2007-01-01 2007-01-02 2007-01-03 2007-01-04 2007-01-05 2007-01-07 2007-01-08 2007-01-09
Close 1.32120 1.32724 1.31690 1.30860 1.29995 1.30039 1.30356 1.29919
High 1.32176 1.32951 1.32903 1.31783 1.31029 1.30141 1.30389 1.30517
Low 1.31650 1.32101 1.31461 1.30704 1.29804 1.30006 1.29722 1.29855
Open 1.31908 1.32137 1.32702 1.31689 1.30866 1.30097 1.30055 1.30350
Всего более 4000 столбцов. Мне нужно нарезать длинную таблицу и получить такого вида:
id Time 01 02 03 04
1 Close 1.32120 1.32724 1.31690 1.30860
High 1.32176 1.32951 1.32903 1.31783
Low 1.31650 1.32101 1.31461 1.30704
Open 1.31908 1.32137 1.32702 1.31689
2 Close 1.29995 1.30039 1.30356 1.29919
High 1.31029 1.30141 1.30389 1.30517
Low 1.29804 1.30006 1.29722 1.29855
Open 1.30866 1.30097 1.30055 1.30350
И так далее вниз. Как это возможно с помощью?
Исходный фрейм данных:
Time Open High Low Close Volume
0 2007-01-01 1.31908 1.32176 1.31650 1.32120 1995282
1 2007-01-02 1.32137 1.32951 1.32101 1.32724 2009661
2 2007-01-03 1.32702 1.32903 1.31461 1.31690 2016603
3 2007-01-04 1.31689 1.31783 1.30704 1.30860 2007990
4 2007-01-05 1.30866 1.31029 1.29804 1.29995 1916561
5 2007-01-07 1.30097 1.30141 1.30006 1.30039 96987
6 2007-01-08 1.30055 1.30389 1.29722 1.30356 2008364
7 2007-01-09 1.30350 1.30517 1.29855 1.29919 2000772
8 2007-01-10 1.29921 1.30002 1.29261 1.29347 2024197
9 2007-01-11 1.29345 1.30124 1.28804 1.28910 2006027
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
res = (df
.drop(columns=["Time", "Volume"])
.assign(x=(np.arange(len(df))%4)+1, y=np.arange(len(df))//4)
.set_index(["x", "y"], append=True)
.stack()
.reset_index(name="val")
.pivot_table(index=["y", "level_3"], columns="x", values="val")
.rename_axis([None, None])
.rename_axis(None, axis=1))
где df - исходный DataFrame (до операции pivot)
результат:
In [66]: res
Out[66]:
1 2 3 4
0 Close 1.3212 1.3272 1.3169 1.3086
High 1.3218 1.3295 1.3290 1.3178
Low 1.3165 1.3210 1.3146 1.3070
Open 1.3191 1.3214 1.3270 1.3169
1 Close 1.2999 1.3004 1.3036 1.2992
High 1.3103 1.3014 1.3039 1.3052
Low 1.2980 1.3001 1.2972 1.2986
Open 1.3087 1.3010 1.3006 1.3035
2 Close 1.2935 1.2891 nan nan
High 1.3000 1.3012 nan nan
Low 1.2926 1.2880 nan nan
Open 1.2992 1.2934 nan nan