python - 循环遍历 pandas 分组数据索引
问题描述
苦苦挣扎的新手,我们正在尝试列出分组数据框的项目。要突出问题,请参阅下面的简化示例。首先对项目进行分组:
data = {'colour': ['red','purple','green','purple','blue','red'], 'item': ['hat','scarf','belt','belt','hat','scarf'], 'material': ['felt','wool','leather','wool','plastic','wool']}
df = pd.DataFrame(data=data)
grpd_df = df.groupby(df['item']).apply(lambda df:df.reset_index(drop=True))
grpd_df
colour item material
item
belt 0 green belt leather
1 purple belt wool
hat 0 red hat felt
1 blue hat plastic
scarf 0 purple scarf wool
1 red scarf wool
然后找到所有有红色项目的行
df = grpd_df[grpd_df['colour'].eq('red').groupby(level=0).transform('any')]
print (df)
colour item material
item
hat 0 red hat felt
1 blue hat plastic
scarf 0 purple scarf wool
1 red scarf wool
然后我们想循环遍历 grpd_df 中的项目列表,即帽子和围巾。我们已经尝试过df.index.levels
,但这会输出包括腰带在内的所有物品。
解决方案
您可以使用IndexSlice
andget_level_values
来实现它。
grpd_df.loc[pd.IndexSlice[list(set(df.index.get_level_values(0).tolist())),:]]
Out[302]:
colour item material
item
hat 0 red hat felt
1 blue hat plastic
scarf 0 purple scarf wool
1 red scarf wool
如果需要来自 df 的索引级别
set(df.index.get_level_values(0).tolist())
Out[303]: {'hat', 'scarf'}
推荐阅读
- continuous-integration - VSTS 中构建定义中的 JSON 转换任务
- lua - 重新要求时的 Lua 单例
- excel - 防止用户在表中插入行,除非使用 VBA
- selenium - 如何使用 Selenium Webdriver 从动态网站下载图像
- android - API 26 文本颜色行为的支持库?
- python - PySpark:数据类型的详尽列表
- angular - 如何使用 Angular 将 Typescript 中的 unicode 显示为 Html
- cordova - Cordova 添加/删除插件和平台真的很慢
- javascript - 检测 Edge 浏览器版本(使用 Javascript 或 C#)
- c# - 使用 SqlDataAdapter 防止仅更新某些列