python-3.x - 多索引熊猫数据框:查找与列具有的唯一值数量相关的索引
问题描述
# 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。
如果有人可以帮助我在多索引熊猫数据框中执行操作,我将不胜感激。
解决方案
使用GroupBy.transform
withnunique
和过滤add withboolean 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
,但首先需要来自MultiIndex
by 的列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')
推荐阅读
- c# - 启用连接池时 ODP.NET 缓冲区溢出
- api - SoundCloud CLIENT_SECRET - 如何获得?
- docker - 为什么 docker 容器共享图像 id?
- google-cloud-platform - 刷新 composer/airflow DAG 以动态生成任务列表
- java - 什么是 Java jar META-INF/DEPENDENCIES 以及它是如何创建的?
- javascript - 在 vue js 的选项标签中显示带有名称的图像
- android-emulator - Big Sur 上北极狐的 Android 模拟器问题
- php - 安装要求时怎么可能出现以下错误?
- php - 无法在 html2pdf 中下载 pdf
- flutter - 如何在 Flutter 中使用嵌套(或多个)Future.builder?