我有一個Pandas DataFrame,有一個像下面這樣的列索引:
我有一個Pandas DataFrame,有一個像下面這樣的列索引。
---- ---- ---- ---- ---- ----
|a1| a2| a3| b1| b2| b3|
---- ---- ---- ---- ---- ----
...的資料
我想做的是將這個DataFrame的列索引改為多索引,如下面的格式所示,無需修改資料,只需在索引中增加一個上層(值為A和B)。
-------------- --------------
| A | B |
---- ---- ---- ---- ---- ----
| A1| A2| A3| B1| B2| B3|
---- ---- ---- ---- ---- ----
...的資料
我曾嘗試使用pandas.MultiIndex 函式,但沒有成功。如何解決這個問題?
uj5u.com熱心網友回復:
你可以單獨提取第一個字母并創建一個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)
uj5u.com熱心網友回復:
最簡單的是提取列的第一個值并在嵌套串列中分配回來:
df = pd. DataFrame(0, columns=['A1'/span>,'A2'/span>,'A3'/span>, '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'/span>,'ADs2'/span>,'AD3'/span>, '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'/span>,'b'/span>)
print (df)
a AD B
b ADa1 ADs2 AD3 B1 B2 B3
0 0 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326400.html
標籤:
下一篇:如何對名稱相似的行進行求和
