熊猫:如何检查索引中的任何行是否满足条件

时间:2020-09-22 07:13:51

标签: python pandas

给出示例df:

index1  index2  value
a       1       5
a       1       4
a       2       2
b       1       1
b       1       1
b       2       3
c       1       2
c       1       4
c       2       6

如何按索引1筛选出可能与df = df [df = ...]类似的所有满足某些条件的记录? 示例:我需要index1中的所有记录,其中index1中的任何记录都大于4。然后输出应如下所示:

index1  index2  value
a       1       5
a       1       4
a       2       2
c       1       2
c       1       4
c       2       6

b被过滤掉,因为其值均不满足​​条件。

2 个答案:

答案 0 :(得分:2)

如果index1, index2是列,则首先过滤index1匹配条件,然后按Series.isin过滤原始列:

df1 = df[df['index1'].isin(df.loc[df['value'].gt(4), 'index1'])]
print (df1)
  index1  index2  value
0      a       1      5
1      a       1      4
2      a       2      2
6      c       1      2
7      c       1      4
8      c       2      6

或将GroupBy.transformany一起用于测试至少一场比赛:

df1 = df[df['value'].gt(4).groupby(df['index1']).transform('any')]

如果有MultiIndex

idx = df.index.get_level_values(0)
df2 = df[idx.isin(idx[df['value'].gt(4)])]
print (df2)
               value
index1 index2       
a      1           5
       1           4
       2           2
c      1           2
       1           4
       2           6

df[df['value'].gt(4).groupby(level=0).transform('any')]

答案 1 :(得分:0)

您可以获得所需的输出df[df['value'] >= 4]。如果只需要其中的index1值,则可以使用get_level_values将其视为常规列。例如:

print(df[df['value'] >= 4]].index.get_level_values(0))

输出:

Index(['a', 'a', 'c', 'c'], dtype='object', name='index1')