首页 > 后端开发 > Python教程 > 如何有效地选择 Pandas MultiIndex DataFrame 中的行?

如何有效地选择 Pandas MultiIndex DataFrame 中的行?

Susan Sarandon
发布: 2024-12-12 19:01:16
原创
331 人浏览过

How to Efficiently Select Rows in Pandas MultiIndex DataFrames?

在 Pandas MultiIndex DataFrame 中选择行

问题摘要

给定一个带有 MultiIndex 的 Pandas DataFrame,我们如何根据特定值选择行/每个索引级别中的标签?

切片loc

df.loc[key, :]
登录后复制
  • key 是一个标签元组,每个索引级别一个。
  • 这提供了一种方便而简洁的方法来根据不同级别中的特定值选择行。

切片xs

df.xs(level_key, level=level_name, drop_level=True/False)
登录后复制
  • level_key 是特定索引级别的键。
  • drop_level 控制是否应从生成的 DataFrame 中删除该级别。
  • xs 是在单个级别上切片时特别有用。

过滤query

df.query("condition")
登录后复制
  • condition 是一个布尔表达式,指定过滤条件。
  • 支持跨多个索引级别的灵活过滤。

使用 get_level_values

mask = df.index.get_level_values(level_name).isin(values_list)
selected_rows = df[mask]
登录后复制
  • 创建一个布尔值基于特定索引级别中的值的掩码。
  • 对于更复杂的过滤操作或对多个值进行切片时很有用。

示例

示例1:选择级别“一”中具有特定值的行,并且'two':

# Using loc
selected_rows = df.loc[['a'], ['t', 'u']]

# Using xs
selected_rows = df.xs('a', level='one', drop_level=False)
selected_rows = selected_rows.xs(['t', 'u'], level='two')

# Using query
selected_rows = df.query("one == 'a' and two.isin(['t', 'u'])")

# Using get_level_values
one_mask = df.index.get_level_values('one') == 'a'
two_mask = df.index.get_level_values('two').isin(['t', 'u'])
selected_rows = df[one_mask & two_mask]
登录后复制

示例 2:根据级别 'two' 中的数值不等式过滤行:

# Using query
selected_rows = df.query("two > 5")

# Using get_level_values
two_mask = df.index.get_level_values('two') > 5
selected_rows = df[two_mask]
登录后复制

提示和注意事项

  • 考虑切片/过滤操作的复杂性并相应地选择适当的方法。
  • 对于单个或几个级别的简单切片,首选 loc 或 xs。
  • 对于多个值的复杂过滤或切片,请考虑使用 query 或 get_level_values 作为它们提供了更大的灵活性。
  • 注意使用 pd.IndexSlice 来指定复杂的切片操作loc.
  • sort_index() 可以提高具有未排序 MultiIndex 的大型 DataFrame 的性能。

以上是如何有效地选择 Pandas MultiIndex DataFrame 中的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板