# 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。
如果有人能帮助我在多索引熊猫数据框中执行操作,我将不胜感激。
答案 0 :(得分:0)
将GroupBy.transform
与nunique
一起使用,并按boolean indexing
进行过滤,并为MultiIndex
的第一级的值加上get_level_values
和unique
:>
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')