我有一个带有分层列的数据框,我正在试图弄清楚如何编制索引。当列索引有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]
答案 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]