我的数据采用以下格式(所以2个前导列,然后是我要堆叠的数据)
[[TEXT, DATE, H1, H2, H3,...],
['ABA',01-01-2018,5,6,7,...],
[...]]
我需要将其转换为(相同的2个前导列,然后是堆叠的数据)
[[TEXT, DATE, PRICE, HOUR],
['ABA',01-01-2018,5,H1],
['ABA',01-01-2018,6,H2],
['ABA',01-01-2018,7,H3]]
我尝试将其与
堆叠在一起data2=data.stack().reset_index().rename(columns={'level_0':'TEXT','level_1':'HOUR', 'level_2:'DATE',0:'PRICE'})
但是我得到了
[[TEXT, HOUR, PRICE],
[0,TEXT,'ABA'],
[0,DATE,01-01-2018],
[0,1,5],
[0,2,6]
[0,3,7]]
我尝试过使用stack函数,但是它从未给我想要的结果。
答案 0 :(得分:1)
即使使用单(尽管已基本链接),您也可以做到这一点 说明:
data.set_index(['TEXT', 'DATE']).stack().reset_index()\
.set_axis(labels=['TEXT', 'DATE', 'HOUR', 'PRICE'],
axis='columns', inplace=False)[['TEXT', 'DATE', 'PRICE', 'HOUR']]
元素:
data.set_index(['TEXT', 'DATE'])
-将 TEXT 和 DATE 设置为索引。.stack()
-生成一个以列名作为添加索引级别的 Series 。.reset_index()
-将此 Series 更改为 DataFrame ,
索引列更改为“常规”列。.set_axis(...)
-设置列名。[['TEXT', ...]]
-重新排序列。测试
我创建了具有两行的源DataFrame,如下所示:
data = pd.DataFrame([
['ABA', '01-01-2018', 5, 6, 7],
['CUX', '05-01-2018', 15, 16, 17]],
columns=['TEXT', 'DATE', 'H1', 'H2', 'H3'])
以上指令的结果为:
TEXT DATE PRICE HOUR
0 ABA 01-01-2018 5 H1
1 ABA 01-01-2018 6 H2
2 ABA 01-01-2018 7 H3
3 CUX 05-01-2018 15 H1
4 CUX 05-01-2018 16 H2
5 CUX 05-01-2018 17 H3