简体   繁体   English

在 csv 中处理多个列标题和相同的列名 - pandas/python

[英]Handling multiple column headers and same column names in csv - pandas/python

I have a csv file that looks like this我有一个看起来像这样的 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

The output I am trying to get has to look like this我试图获得的输出必须看起来像这样

                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

I tried transposing the csv read with我尝试将读取的 csv 转置

data=pd.read_csv('transposedata.csv', header=None).T

But then I lose column info.但是后来我丢失了列信息。 I also tried this from another solution provided here at stackoverflow我也从 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)]

I end up with我结束了

                                           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

Any Help?任何帮助?

update when I run the solution given当我运行给定的解决方案时更新

data=pd.read_csv('transposedata1.csv', header=[0,1]).stack(level=0).sort_index(level=1)

i get this我明白了

        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

Thanks谢谢

You do not want to transpose the dataframe but stack one column level.您不想转置数据框而是堆叠一列级别。 Simply you must declare to pandas that the csv file has a 2 rows header:只需向 Pandas 声明 csv 文件有 2 行标题:

data=pd.read_csv('transposedata.csv', header=[0,1]).stack(level=0).sort_index(level=2)

It should give:它应该给出:

             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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 合并具有相同列标题 PYTHON 的多个 csv - Merge multiple csv with same column headers PYTHON python pandas以相同的方式重命名多个列标题 - python pandas rename multiple column headers the same way 如何使用 Pandas 在数据框中添加 CSV 文件名作为列标题? - How to add CSV file names as Column Headers in a dataframe using pandas? For 循环根据 csv python 中的列名创建标题 - For loop to create headers based on column names in csv python pandas:如何在一列上合并具有相同列名的多个数据框? - pandas: How to merge multiple dataframes with same column names on one column? pandas python中没有列名 - No Column Names in pandas python Import multiple csv files into pandas and concatenate into one DataFrame where 1st column same in all csv and no headers of data just file name - Import multiple csv files into pandas and concatenate into one DataFrame where 1st column same in all csv and no headers of data just file name 如何连接具有多个工作表且列标题相同但在 Python/Pandas 中随机排序的文件? - How do I concatenate files that have multiple sheets with same column headers but randomly ordered in Python/Pandas? 枚举CSV中属于python中相同标签(键)的列标题 - enumerate column headers in CSV that belong to the same tag (key) in python Python/Pandas 样式的列标题 - Python/Pandas style column headers
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM