首页 > 解决方案 > 多索引熊猫数据框:查找与列具有的唯一值数量相关的索引

问题描述

# import Pandas library
import pandas as pd

idx = pd.MultiIndex.from_product([['A001', 'B001','C001'],
                              ['0', '1', '2']],
                             names=['ID', 'Entries'])
col = ['A', 'B']

df = pd.DataFrame('-', idx, col)
df.loc['A001', 'A'] = [10,10,10]
df.loc['A001', 'B'] = [90,84,70]
df.loc['B001', 'A'] = [10,20,10]
df.loc['B001', 'B'] = [70,86,67]
df.loc['C001', 'A'] = [20,20,20]
df.loc['C001', 'B'] = [98,81,72]
#df is a dataframe
df

以下是问题:如何返回列“A”具有多个唯一值的 ID?在上述数据集中,理想情况下它应该返回 B001。

如果有人可以帮助我在多索引熊猫数据框中执行操作,我将不胜感激。

标签: python-3.xpandasmulti-index

解决方案


使用GroupBy.transformwithnunique和过滤add withboolean indexing的第一层的值:MultiIndexget_level_valuesunique

a = df[df.groupby(level=0)['A'].transform('nunique') > 1].index.get_level_values(0).unique()
print(a)
Index(['B001'], dtype='object', name='ID')

或使用duplicated,但首先需要来自MultiIndexby 的列reset_index

m = df.reset_index().duplicated(subset=['ID','A'], keep=False).values
a = df[~m].index.get_level_values(0).unique()
print(a)
Index(['B001'], dtype='object', name='ID')

推荐阅读