我有一个看起来像这样的现有DataFrame:
1 | 1 | 1 | 2 | 2 | 2 | 2
--------------------------------------------------------
| abc | def | ghi | jkl | mno | pqr | stu
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
我已经尝试了一段时间,但没有成功。
重复的1和2已经是一级MultiIndex。 我知道,如果我添加另一个级别,它们将合并在一起,但是很难将第一行转换为MultiIndex的第二级别。
是否有一种简单的方法?
所需的输出:
1 | 2
| abc | def | ghi | jkl | mno | pqr | stu
--------------------------------------------------------
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
| 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00
任何帮助将不胜感激! 谢谢
答案 0 :(得分:2)
我认为您需要MultiIndex.from_arrays
,然后用索引编制的DataFrame.iloc
过滤掉第一行:
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[0])
df = df.iloc[1:]
答案 1 :(得分:1)
使用T
和set_index
df.T.set_index(0,append=True).T
答案 2 :(得分:1)
Jezrael 提出的解决方案需要进行一些更正:
df.columns
和df.iloc[0]
应该一起
from_arrays
的参数,而不是两个单独的参数。
第二级 MultiIndex ( df.iloc [0] )的来源 应该补充 .values 。否则,此 MultiIndex 级别 继承名称( 0 )- 0 行的索引值。
生成的 MultiIndex 应该替换为df.columns
,
而不是整个df
。
所以整个解决方案应该是:
df.columns = pd.MultiIndex.from_arrays([df.columns, df.iloc[0].values])
df = df.iloc[1:]
答案 3 :(得分:0)
除了jezrael的答案。这个想法是正确的,只需进行一些更改即可使其生效。谢谢jezrael。
index = np.array([df.columns.values, df.iloc[0].values])
df = pd.MultiIndex.from_arrays(index)
df = df.iloc[1:]