多索引熊猫数据框:找到与一列具有唯一值数量有关的索引

时间:2018-07-09 10:08:54

标签: python-3.x pandas multi-index

# 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。

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

1 个答案:

答案 0 :(得分:0)

GroupBy.transformnunique一起使用,并按boolean indexing进行过滤,并为MultiIndex的第一级的值加上get_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,但首先需要reset_index之前的MultiIndex中的列:

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')