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