我在 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 |
答案 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')],
)