如何检查pandas MultiIndex中是不是存在列
Posted
技术标签:
【中文标题】如何检查pandas MultiIndex中是不是存在列【英文标题】:How to check if a column exists in a pandas MultiIndex如何检查pandas MultiIndex中是否存在列 【发布时间】:2017-01-01 02:18:18 【问题描述】:假设我有一个带有 MultiIndex 列的 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 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 的所有现有唯一值是什么(例如 DataFrame 经历了一些过程,其中对于级别 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])
有什么更好的方法来做到这一点?
【问题讨论】:
【参考方案1】: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()
【讨论】:
以上是关于如何检查pandas MultiIndex中是不是存在列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Panda MultiIndex Dataframe 中绘制 ylabel
如何在 pandas DataFrame 中选择具有 MultiIndex 的列(用于 seaborn 散点图)?
pandas - 如何使用 MultiIndex 在 DataFrame 的深层检索最小值索引
Pandas DataFrame - 如何检索 MultiIndex 级别的特定组合