Python Pandas :在排序的多索引数据框中查找 n 并为每个 1 级索引查找 return [0:n+1]

Python Pandas : find n in a sorted multindex dataframe and return [0:n+1] for each level 1 index

我认为这是一个简单的过滤任务,但遇到了一些问题。 我们有一个大致具有这种形状的数据:

name item cumsum
name1 item 1 0.05
item 2 0.10
item 3 0.31
name2 item 1 0.02
item 2 0.07
name3 item 1 0.01
item 2 0.07
item 3 0.21
name4 item 1 0.03
item 2 0.12
item 3 0.21
item 4 0.35

我想要的是 return 项目小于 0.2 的数据框和正上方的项目。这是 table 我想作为输出:

name item cumsum
name1 item 1 0.05
item 2 0.10
item 3 0.31
name2 item 1 0.02
item 2 0.07
name3 item 1 0.01
item 2 0.07
item 3 0.21
name4 item 1 0.03
item 2 0.12
item 3 0.21

我尝试为每个 'name' 找到 cumsum 大于 0.2 的 'item',然后 return 整个范围的索引为:

    df = df.loc['name1']
    idx = df.loc[df['cumsum'] > 0.2].index[0]
    iidx = df.index.get_loc(idx) + 1
    df = df.iloc[:iidx]

并为每个 'name' 执行此操作。然而,这对 name2 失败了。

有人可以帮忙吗?

使用 | 按位 OR 按每组移动 DataFrameGroupBy.shift 的掩码:

m = (df['cumsum'] < 0.2)
df = df[m | m.groupby(level=0).shift(fill_value=False)]
print (df)
              cumsum
name  item          
name1 item 1    0.05
      item 2    0.10
      item 3    0.31
name2 item 1    0.02
      item 2    0.07
name3 item 1    0.01
      item 2    0.07
      item 3    0.21
name4 item 1    0.03
      item 2    0.12
      item 3    0.21