簡體   English   中英

將 dataframe 中的第一行添加到列標題

[英]Adding first row in dataframe to column headers

我在 pandas 中的 dataframe 看起來像這樣:

| 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  |

其中第一行實際上是將當前 header 分解為子部分的輔助 header。

是否可以將第一行向上移動到標題和 dataframe 值之外? 可以使用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  |

嘗試這個:

df.columns = pd.MultiIndex.from_tuples([df.columns ,df.iloc[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)

Output

   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/

您可以使用:

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')],
           )


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM