我有一个看起来像这样的CSV文件
PROD1 PROD1 PROD2 PROD2
X Y X Y
AA A 1 2 9 10
BB B 3 4 11 12
CC C 5 6 13 14
DD D 7 8 15 16
我试图获得的输出必须看起来像这样
X Y
AA A PROD1 1 2
BB B PROD1 3 4
CC C PROD1 5 6
DD D PROD1 7 8
AA A PROD2 9 10
BB B PROD2 11 12
CC C PROD2 13 14
DD D PROD2 15 16
我尝试将CSV读入与
data=pd.read_csv('transposedata.csv', header=None).T
但是随后我丢失了列信息。我还从stackoverflow此处提供的另一种解决方案中尝试了此方法
df = pd.read_csv('transposedata.csv', header=[0,1])
a = df.columns.get_level_values(0).to_series()
b = a.mask(a.str.startswith('Unnamed')).ffill().fillna('')
df.columns = [b, df.columns.get_level_values(1)]
我最终得到
PROD1 PROD2
Unnamed: 0_level_1 Unnamed: 1_level_1 X Y X Y
0 AA A 1 2 9 10
1 BB B 3 4 11 12
2 CC C 5 6 13 14
3 DD D 7 8 15 16
有帮助吗?
更新 当我运行给定的解决方案
data=pd.read_csv('transposedata1.csv', header=[0,1]).stack(level=0).sort_index(level=1)
我明白了
Unnamed:0_level_1 Unnamed:1_level_1 X Y
0 PROD1 NaN NaN 1 2
1 PROD1 NaN NaN 3 4
2 PROD1 NaN NaN 5 6
3 PROD1 NaN NaN 7 8
0 PROD2 NaN NaN 9 10
1 PROD2 NaN NaN 11 12
2 PROD2 NaN NaN 13 14
3 PROD2 NaN NaN 15 16
0 Unnamed:0_level_0 AA NaN NaN NaN
1 Unnamed:0_level_0 BB NaN NaN NaN
2 Unnamed:0_level_0 CC NaN NaN NaN
3 Unnamed:0_level_0 DD NaN NaN NaN
0 Unnamed:1_level_0 NaN A NaN NaN
1 Unnamed:1_level_0 NaN B NaN NaN
2 Unnamed:1_level_0 NaN C NaN NaN
3 Unnamed:1_level_0 NaN D NaN NaN
谢谢
答案 0 :(得分:4)
您不想转置数据框,而是堆叠一列级别。只需向熊猫声明csv文件具有2行标题即可:
data=pd.read_csv('transposedata.csv', header=[0,1]).stack(level=0).sort_index(level=2)
它应该给出:
X Y
AA A PROD1 1 2
BB B PROD1 3 4
CC C PROD1 5 6
DD D PROD1 7 8
AA A PROD2 9 10
BB B PROD2 11 12
CC C PROD2 13 14
DD D PROD2 15 16