Python 如何检查多索引中是否存在列
假设我有一个DataFrame,其中包含如下列的多索引:Python 如何检查多索引中是否存在列,python,pandas,group-by,multi-index,pandas-groupby,Python,Pandas,Group By,Multi Index,Pandas Groupby,假设我有一个DataFrame,其中包含如下列的多索引: In [29]: df = pd.DataFrame([[0] * 8], columns = pd.MultiIndex.from_product( [['a', 'b'], [1, 2], [2000, 2001]]) ) In [30]: df Out[30]: a b 1 2 1 2 2000 2001 2000
In [29]: df = pd.DataFrame([[0] * 8], columns = pd.MultiIndex.from_product(
[['a', 'b'], [1, 2], [2000, 2001]])
)
In [30]: df
Out[30]:
a b
1 2 1 2
2000 2001 2000 2001 2000 2001 2000 2001
0 0 0 0 0 0 0 0 0
In [46]: df.columns.levels
Out[46]: FrozenList([[u'a', u'b'], [1, 2], [2000, 2001]])
我需要知道,对于级别0的所有值和级别1的某些特定值,级别2的所有现有唯一值是什么(例如,数据帧经过某个过程,其中对于级别1和级别0的某些值,级别2被删除)。到目前为止,我能想到的最好的方法是:
In [54]: level_1_val = 2
In [55]: cols_series = df.columns.to_series()
In [56]: cols_series[
....: cols_series.index.get_level_values(1) == level_1_val
....: ].index.get_level_values(2).unique()
array([2000, 2001])
有什么更好的方法可以做到这一点?IIUC
df.xs(2, axis=1, level=1).groupby(axis=1, level=1).first().columns.values
array([2000, 2001])
或
df.xs(2, axis=1, level=1).columns.get_level_values(level=1).unique()