如何将 Pandas DataFrame 更改为列多索引?
How to change a Pandas DataFrame into a column Multi-Index?
我有一个 Pandas DataFrame,其列索引如下所示:
+----+----+----+----+----+----+
| A1| A2| A3| B1| B2| B3|
+----+----+----+----+----+----+
...the data
我想做的是将这个DataFrame的column index改成多索引的,如下图格式,不修改数据,只是简单的在索引中增加一个上层(with值 A
和 B
).
+--------------+--------------+
| A | B |
+----+----+----+----+----+----+
| A1| A2| A3| B1| B2| B3|
+----+----+----+----+----+----+
...the data
我尝试使用 pandas.MultiIndex
function 但没有成功。如何解决?
最简单的方法是提取列的第一个值并在嵌套列表中分配回去:
df = pd.DataFrame(0, columns=['A1','A2','A3','B1','B2','B3'], index=[0])
df.columns = [df.columns.str[0], df.columns]
print (df)
A B
A1 A2 A3 B1 B2 B3
0 0 0 0 0 0 0
如果需要从开头提取所有大写字母:
df = pd.DataFrame(0, columns=['ADa1','ADs2','AD3','B1','B2','B3'], index=[0])
df.columns = [df.columns.str.extract('(^[A-Z]+)', expand=False), df.columns]
print (df)
AD B
ADa1 ADs2 AD3 B1 B2 B3
0 0 0 0 0 0 0
如果需要设置列名也使用 MultiIndex.from_arrays
:
df = pd.DataFrame(0, columns=['ADa1','ADs2','AD3','B1','B2','B3'], index=[0])
df.columns = pd.MultiIndex.from_arrays([df.columns.str.extract('(^[A-Z]+)', expand=False),
df.columns],
names=('a','b'))
print (df)
a AD B
b ADa1 ADs2 AD3 B1 B2 B3
0 0 0 0 0 0 0
您可以单独提取第一个字母并创建 MultiIndex
-
multi_index_level_0 = [c[0] for c in df.columns]
multi_index = [multi_index_level_0, df.columns.values]
df.columns = pd.MultiIndex.from_arrays(multi_index)
我有一个 Pandas DataFrame,其列索引如下所示:
+----+----+----+----+----+----+
| A1| A2| A3| B1| B2| B3|
+----+----+----+----+----+----+
...the data
我想做的是将这个DataFrame的column index改成多索引的,如下图格式,不修改数据,只是简单的在索引中增加一个上层(with值 A
和 B
).
+--------------+--------------+
| A | B |
+----+----+----+----+----+----+
| A1| A2| A3| B1| B2| B3|
+----+----+----+----+----+----+
...the data
我尝试使用 pandas.MultiIndex
function 但没有成功。如何解决?
最简单的方法是提取列的第一个值并在嵌套列表中分配回去:
df = pd.DataFrame(0, columns=['A1','A2','A3','B1','B2','B3'], index=[0])
df.columns = [df.columns.str[0], df.columns]
print (df)
A B
A1 A2 A3 B1 B2 B3
0 0 0 0 0 0 0
如果需要从开头提取所有大写字母:
df = pd.DataFrame(0, columns=['ADa1','ADs2','AD3','B1','B2','B3'], index=[0])
df.columns = [df.columns.str.extract('(^[A-Z]+)', expand=False), df.columns]
print (df)
AD B
ADa1 ADs2 AD3 B1 B2 B3
0 0 0 0 0 0 0
如果需要设置列名也使用 MultiIndex.from_arrays
:
df = pd.DataFrame(0, columns=['ADa1','ADs2','AD3','B1','B2','B3'], index=[0])
df.columns = pd.MultiIndex.from_arrays([df.columns.str.extract('(^[A-Z]+)', expand=False),
df.columns],
names=('a','b'))
print (df)
a AD B
b ADa1 ADs2 AD3 B1 B2 B3
0 0 0 0 0 0 0
您可以单独提取第一个字母并创建 MultiIndex
-
multi_index_level_0 = [c[0] for c in df.columns]
multi_index = [multi_index_level_0, df.columns.values]
df.columns = pd.MultiIndex.from_arrays(multi_index)