[英]How to make first row turn into second level MultiIndex
我有一个现有的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
我一直在尝试这个,但没有成功。
重复的一个和两个已经是一个级别的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
任何帮助将非常感谢! 谢谢
我认为您需要MultiIndex.from_arrays
,然后通过索引过滤DataFrame.iloc
第一行:
df = pd.MultiIndex.from_arrays(df.columns, df.iloc[0])
df = df.iloc[1:]
使用T
和set_index
df.T.set_index(0,append=True).T
Jezrael提出的解决方案需要进行一些修正:
df.columns
和df.iloc[0]
应该在一起的第一个参数from_arrays
,不两个独立的参数。
第二级MultiIndex ( df.iloc [0] )的来源应补充.values 。 否则,此MultiIndex级别继承name( 0 ) - 第0行的索引值。
生成的MultiIndex应该替换为df.columns
,而不是整个df
。
所以整个解决方案应该是:
df.columns = pd.MultiIndex.from_arrays([df.columns, df.iloc[0].values])
df = df.iloc[1:]
除了jezrael的回答。 这个想法是正确的,只是做了一些改变才能使它发挥作用。 谢谢jezrael。
index = np.array([df.columns.values, df.iloc[0].values])
df = pd.MultiIndex.from_arrays(index)
df = df.iloc[1:]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.