【问题标题】:How to iterate over MultiIndex levels in Pandas?如何迭代 Pandas 中的 MultiIndex 级别?
【发布时间】:2016-03-12 09:12:05
【问题描述】:

我经常有 MultiIndex 索引,我想迭代更高级别索引相等的组。它基本上看起来像

from random import choice
import pandas as pd
N = 100
df = pd.DataFrame([choice([1, 2, 3]) for _ in range(N)],
                  columns=["A"],
                  index=pd.MultiIndex.from_tuples([(choice("ab"), choice("cd"), choice("de")) 
                                                   for _ in range(N)]))

for idx in zip(df.index.get_level_values(0), df.index.get_level_values(1)):
    df_select = df.ix[idx]

有没有办法让 for 循环迭代更整洁?

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    使用groupbydf_select 视图的索引包括前两个级别值,但其他方面与您的示例类似。

    for idx, df_select in df.groupby(level=[0, 1]):
        ...
    

    【讨论】:

      【解决方案2】:

      除了 groupby 逻辑,您还可以使用 lambda 函数,它的优点是不必指定级别数,即它会选择除最后一个之外的所有级别:

      for idx in df.index.map(lambda x: x[:-1]):
       df_select=df.ix[idx]
      

      【讨论】:

      • 我相信这个答案是错误的,因为它不会遍历第一个 df.index.nlevels-1 级别的“唯一”组,而是遍历所有行,只是按第​​一个 df.index.nlevels-1 级别过滤。这样,如果每个第 n 级有 10 个唯一索引值,它将选择每个唯一的 df_select 十次。
      猜你喜欢
      • 2017-10-20
      • 2020-02-14
      • 2023-03-10
      • 2017-04-19
      • 2018-11-09
      • 2015-05-22
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多