如何与熊猫多列堆叠

时间:2019-09-02 14:32:28

标签: python pandas

我的数据采用以下格式(所以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函数,但是它从未给我想要的结果。

1 个答案:

答案 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