1 回答

TA貢獻1895條經驗 獲得超3個贊
首先,我們創建一個 DataFrame(帶有 MultiIndex),就像您的示例中的那樣:
import numpy as np
import pandas as pd
data = np.arange(11 * 8).reshape((11, 8))
midx = pd.MultiIndex.from_tuples(
? ? [
? ? ? ? ('2020-01-01', 'A', 'C1', 'D1'),
? ? ? ? ('2020-01-01', 'A', 'C1', 'D2'),
? ? ? ? ('2020-01-01', 'A', 'C2', 'D3'),
? ? ? ? ('2020-01-01', 'A', 'C2', 'D4'),
? ? ? ??
? ? ? ? ('2020-01-01', 'B', 'C3', 'D5'),
? ? ? ? ('2020-01-01', 'B', 'C3', 'D6'),
? ? ? ? ('2020-01-01', 'B', 'C4', 'D7'),
? ? ? ? ('2020-01-01', 'B', 'C4', 'D8'),
? ? ],
? ? names=('y', 'a', 'b', 'c',)
)
df = pd.DataFrame(data=data, columns=midx)
df
現在,我們使用有點麻煩的“索引切片”來提取感興趣的列。這里有一些例子:
# get the 'A' columns
df.loc[:, (slice(None), 'A')]??
# get the 'C1' column
df.loc[:, (slice(None), slice(None), 'C1')]??
# get the D1 and D5 columns
df.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])]??
y? ? ? ?2020-01-01
a? ? ? ?A? ? ? ?B
b? ? ? ?C1? ? ? C3
c? ? ? ?D1? ? ? D5
0? ? ? ?0? ? ? ?4
1? ? ? ?8? ? ? ?12
2? ? ? ?16? ? ? 20
3? ? ? ?24? ? ? 28
4? ? ? ?32? ? ? 36
5? ? ? ?40? ? ? 44
6? ? ? ?48? ? ? 52
7? ? ? ?56? ? ? 60
8? ? ? ?64? ? ? 68
9? ? ? ?72? ? ? 76
10? ? ? 80? ? ? 84
這是執行最后一個操作后的 MultiIndex:
df.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])].columns
MultiIndex([('2020-01-01', 'A', 'C1', 'D1'),
? ? ? ? ? ? ('2020-01-01', 'B', 'C3', 'D5')],
? ? ? ? ? ?names=['y', 'a', 'b', 'c'])
添加回答
舉報