将数据框中的第一行添加到列标题

时间:2021-05-14 19:04:39

标签: python pandas

我在 Pandas 中的数据框如下所示:

| Location1 |     |      | Location2 |     |    | Location3 |     |     |
|-----------|-----|------|-----------|-----|----|-----------|-----|-----|
| A1        | B1  | C1   | A1        | B1  | C1 | A1        | B1  | C1  |
| 123       | 457 | 268  | 78        | 12  | 34 | 234       | 456 | 456 |
| 435       | 234 | 5436 | 34        | 679 | 37 | 7546      | 45  | 64  |

其中第一行实际上是将当前标题分解为子部分的辅助标题。

是否可以将第一行向上移动到标题和数据帧值之外?可以使用 multilevel 吗? 例如。类似下面的东西

| Location1 |     |      | Location2 |     |    | Location3 |     |     |
| A1        | B1  | C1   | A1        | B1  | C1 | A1        | B1  | C1  |
|-----------|-----|------|-----------|-----|----|-----------|-----|-----|
| 123       | 457 | 268  | 78        | 12  | 34 | 234       | 456 | 456 |
| 435       | 234 | 5436 | 34        | 679 | 37 | 7546      | 45  | 64  |

3 个答案:

答案 0 :(得分:0)

试试这个:

df.columns = pd.MultiIndex.from_tuples([df.columns ,df.iloc[0]])

答案 1 :(得分:0)

import pandas as pd
import numpy as np
df = pd.DataFrame(
    data=np.random.randint(
        0, 10, (6,4)),
    columns=["a", "b", "c", "d"])
df.columns = pd.MultiIndex.from_tuples(
    zip(['A', 'B','C', 'D'], 
        df.columns))
print(df)

输出

   A  B  C  D
   a  b  c  d
0  2  6  4  6
1  5  0  5  1
2  9  6  6  1
3  8  9  7  4
4  6  5  6  6
5  3  9  1  5

来源:https://www.delftstack.com/howto/python-pandas/how-to-add-header-row-to-a-pandas-dataframe/

答案 2 :(得分:0)

您可以使用:

cols = df.filter(regex=r'\S').columns   # Get current non-blank column names
new_idx = pd.MultiIndex.from_product([cols, df.iloc[0, 0:3].to_numpy()])  # create multi-index from extracted non-blank columns and from row 0 repeating 3 elements
df.columns = new_idx      # set new multi-index to columns index
df = df.iloc[1:]          # Skip first row for data

结果:

print(df)


  Location1            Location2          Location3          
         A1   B1    C1        A1   B1  C1        A1   B1   C1
1       123  457   268        78   12  34       234  456  456
2       435  234  5436        34  679  37      7546   45   64


print(df.columns)


MultiIndex([('Location1', 'A1'),
            ('Location1', 'B1'),
            ('Location1', 'C1'),
            ('Location2', 'A1'),
            ('Location2', 'B1'),
            ('Location2', 'C1'),
            ('Location3', 'A1'),
            ('Location3', 'B1'),
            ('Location3', 'C1')],
           )


相关问题