给出示例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被过滤掉,因为其值均不满足条件。
答案 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.transform
与any
一起用于测试至少一场比赛:
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')