索引分层列

时间:2014-01-31 21:00:09

标签: python pandas dataframe

我有一个带有分层列的数据框,我正在试图弄清楚如何编制索引。当列索引有4个级别时,如何采用数据帧基本索引df.loc[row_indexer,column_indexer]?我正在寻找像df.loc['2014-01-02', DK='18757']这样的策略......如何在那里访问数据?如何访问给定列级别下面的列名称 - 返回'App_Field'名称,其中'DeviceType'='Meter',或返回'Fields',其中'DK'='20653'?

>>> df
DeviceType            Meter         Inverter                   \
DK                    18757            20178            20179   
Field            Generation     Inverter_Gen     Inverter_Gen   
App_Field  generation_cumul generation_cumul generation_cumul   
2014-01-01              NaN              NaN              NaN   
2014-01-02              NaN              NaN              NaN   
2014-01-03              NaN              NaN              NaN   
2014-01-04              NaN              NaN              NaN   
2014-01-05              NaN              NaN              NaN   
2014-01-06              NaN              NaN              NaN   
2014-01-07              NaN              NaN              NaN   
2014-01-08              NaN              NaN              NaN   
2014-01-09              NaN              NaN              NaN   
2014-01-10              NaN              NaN              NaN   

DeviceType                         Weather                       
DK                    20180          20653                       
Field          Inverter_Gen     Irradiance             CellTemp  
App_Field  generation_cumul irradiance_avg cell_temperature_avg  
2014-01-01              NaN            NaN                  NaN  
2014-01-02              NaN            NaN                  NaN  
2014-01-03              NaN            NaN                  NaN  
2014-01-04              NaN            NaN                  NaN  
2014-01-05              NaN            NaN                  NaN  
2014-01-06              NaN            NaN                  NaN  
2014-01-07              NaN            NaN                  NaN  
2014-01-08              NaN            NaN                  NaN  
2014-01-09              NaN            NaN                  NaN  
2014-01-10              NaN            NaN                  NaN  

[10 rows x 6 columns]

1 个答案:

答案 0 :(得分:0)

将每个级别的列转换为一个系列,然后您可以使用布尔掩码来选择所需的列。

a = list("EEEETTTT")
b = list("11223344")
c = list("XYXYXYXY")
mi = pd.MultiIndex.from_tuples(zip(a,b,c), names=["A","B","C"])
df = pd.DataFrame(np.random.randint(0, 10, (5, 8)), columns=mi)

A, B, C = [pd.Series(mi.get_level_values(name)) for name in mi.names]
mask = (A=="T") & (B.isin(["2","3"]))
df.iloc[:, mask.values]