【问题标题】:Two row header to one row header for a data frame in PandasPandas中数据框的两行标题到一个行标题
【发布时间】:2021-02-17 10:28:19
【问题描述】:

我有一个带有多索引、二维标题的数据集。我想通过在同一行中删除第一行中的空列名来将其合并到一个标题行中。

下面显示了我拥有的数据框的结构。 前两行是标题。

         id  One             Two      
  response   X1   Y1   Z1    X2    Y2
0        0  1.1  1.2  1.4  1.11  1.22
1        1  1.1  1.2  1.3  1.11  1.22
2        2  1.1  1.2  1.1  1.11  1.22

          

我想把上面的数据框改成下面的一个,

   id  One 1.X1  One 2.Y1  One 3.Z1  Two 1.X2  Two 2.Y2
0   0       1.1       1.2       1.4      1.11      1.22
1   1       1.1       1.2       1.3      1.11      1.22
2   2       1.1       1.2       1.1      1.11      1.22

实际数据框有 100 多列。

希望有人可以在这里帮助我。

比你好多了。

玛丽·阿宾。

【问题讨论】:

    标签: python-3.x pandas header multi-index


    【解决方案1】:

    如果您的列确实是MultiIndex

    print(df.columns)
    
    MultiIndex([( 'id', 'response'),
                ('One',       'X1'),
                ('One',       'Y1'),
                ('One',       'Z1'),
                ('Two',       'X2'),
                ('Two',       'Y2')],
               )
    

    然后我们可以将它们传递到一个新的数据框中,并在展平列之前在第一级使用累积计数。

    s = pd.DataFrame.from_records(df.columns)
    s['col'] =  (s.groupby(0).cumcount()+1).astype(str) + '.'
    #skip the first row and re-order columns to match your desired order.
    df.columns = ['id'] + s.iloc[1:, [0,2,1]].astype(str).agg(' '.join,1).tolist()
    

    print(df)
    
       id  One 1. X1  One 2. Y1  One 3. Z1  Two 1. X2  Two 2. Y2
    0   0        1.1        1.2        1.4       1.11       1.22
    1   1        1.1        1.2        1.3       1.11       1.22
    2   2        1.1        1.2        1.1       1.11       1.22
    
    
    print(s)
        0         1 col
    0   id  response  1.
    1  One        X1  1.
    2  One        Y1  2.
    3  One        Z1  3.
    4  Two        X2  1.
    5  Two        Y2  2.
    

    【讨论】:

    • 我尝试了这段代码,但它无法提供所需的结果。无论如何,感谢您的时间和精力。
    • @JKdMwA 输出有什么问题?它计算您的输入
    • 这是来自 Jupyter 的屏幕截图。 imgur.com/GbzjIE8 但它在终端上工作。
    • 当我在新的 jupyter 页面中尝试它时,它给出了想要的结果。
    【解决方案2】:

    【讨论】:

    • 这个也不行。该代码只选择一行作为标题,而不合并标题行。感谢您在这里的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多