透视表和带标题的合并列

时间:2018-03-26 04:03:35

标签: python pandas dataframe pivot melt

我有DataFrame如下:

 Ranges Relative_17-Sep Relative_17-Oct Relative_17-Nov
  <=20%  0.65            0.36            0.29
  >20%   99.35           99.64           99.71

我正在尝试找到将其转换为:

的方法
"Sep17<=20%" "Sep17>20%"   "Oct17<=20%" "Oct17>20%" "Nov17<=20%" "Nov17>20%"
 0.65          99.35        0.36            99.64     0.29        99.71

任何帮助。

谢谢

1 个答案:

答案 0 :(得分:3)

选项1
melt

v = df.melt('Ranges')

df = pd.DataFrame(
    v['value'].values, 
    index=v['variable'].str.split('_').str[-1] + v['Ranges']
).T

df
   17-Sep<=20%  17-Sep>20%  17-Oct<=20%  17-Oct>20%  17-Nov<=20%  17-Nov>20%
0         0.65       99.35         0.36       99.64         0.29       99.71

选项2
修改df.columns,然后进行stack操作。

df.columns = df.columns.str.split('_').str[-1]
v = df.set_index('Ranges').stack()

df = pd.DataFrame(
    v.values, 
    index=v.index.get_level_values(1) + v.index.get_level_values(0)
).T

df
   17-Sep<=20%  17-Oct<=20%  17-Nov<=20%  17-Sep>20%  17-Oct>20%  17-Nov>20%
0         0.65         0.36         0.29       99.35       99.64       99.71