目標是在a其中切分 0 級。
但是,如下切片多索引列時,
a_cols=df.loc[:,('a',slice(None))]
編譯器回傳
TypeError: unhashable type: 'slice'
import pandas as pd
import numpy as np
np.random.seed(0)
arr=np.random.randint(5, size=(2, 12))
df=pd.DataFrame(arr,columns=[('a','E1_g1'),('a','E1_g2'),('a','E1_g3'),
('a','E2_g1'),('a','E2_g2'),('a','E2_g3'),
('a','E3_g1'),('a','E3_g2'),('a','E3_g3'),
('b','E1'),('b','E1'),('b','E13'),])
我可以知道我在這里做錯了什么嗎?
我也試過
df.loc[:, df.columns.get_level_values(0) == 'a']
但是,反而產生了一個空df。
uj5u.com熱心網友回復:
那是因為df.columns不是 MultiIndex。您可以使用通過過濾創建的串列對其進行索引df.columns:
cols = [(i,j) for (i,j) in df.columns if i=='a']
out = df[cols]
輸出:
(a, E1_g1) (a, E1_g2) (a, E1_g3) (a, E2_g1) (a, E2_g2) (a, E2_g3) (a, E3_g1) (a, E3_g2) (a, E3_g3)
0 4 0 3 3 3 1 3 2 4
1 2 1 0 1 1 0 1 4 3
您可以df.columns使用MultiIndex.from_tuples. 然后你的切片方法有效:
df.columns = pd.MultiIndex.from_tuples(df.columns)
a_cols = df.loc[:,('a',slice(None))]
輸出:
a
E1_g1 E1_g2 E1_g3 E2_g1 E2_g2 E2_g3 E3_g1 E3_g2 E3_g3
0 4 0 3 3 3 1 3 2 4
1 2 1 0 1 1 0 1 4 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463667.html
上一篇:將整數值轉換為周(年-周格式)
