如何根据列的条件选择 DataFrame 的子集

问题描述 投票:0回答:1

类似于如何根据MultiIndex的一个级别选择DataFrame的子集,让

df = pd.DataFrame({"v":[x*x for x in range(12)]}, 
                  index=pd.MultiIndex.from_product([["a","b","c"],[1,2,3,4]]))

并假设我只想选择

v
与给定first级别的最小值相差25以内的行:

       v
a 1    0
  2    1
  3    4
  4    9
b 1   16
  2   25
  3   36
c 1   64
  2   81

这一次我不知道如何轻松地做到这一点......

python pandas dataframe multi-index
1个回答
1
投票

您可以按数据框的级别 0 进行分组,并获得每个组中

v
列的最小值。然后对每组中的
v
和最小的
v
进行比较。

out = df[df['v'].sub(df.groupby(level=0)['v'].transform('min')) < 25]
print(out)

      v
a 1   0
  2   1
  3   4
  4   9
b 1  16
  2  25
  3  36
c 1  64
  2  81

如果你想在 multiindex 的 level 1 中找到最小值,你可以这样做

out = df[((df.index.get_level_values(level=-1) -
           df.reset_index(level=-1).groupby(level=0)['level_1'].transform('min'))
          # or without reset index
          # df.groupby(level=0).transform(lambda g: g.index.get_level_values(level=-1).min())
          < 25).values]
© www.soinside.com 2019 - 2024. All rights reserved.