Pandas 多索引布尔索引
Pandas multiindex boolean indexing
所以给定一个多索引数据框,我想 return 只有满足多索引中较低索引的所有级别的条件的行。这是一个小的工作示例:
df = pd.DataFrame({'a': [1, 1, 2, 2], 'b': [1, 2, 3, 4], 'c': [0, 2, 2, 2]})
df = df.set_index(['a', 'b'])
print(df)
输出:
c
a b
1 1 0
2 2
2 3 2
4 2
现在,我想 return c > 1
的条目。例如,我想做一些像
df[df[c > 1]]
输出:
c
a b
1 2 2
2 3 2
4 2
但是我想得到
输出:
c
a b
2 3 2
4 2
关于如何以最有效的方式做到这一点有什么想法吗?
我最终使用了 groupby
:
df.groupby(level=0).filter(lambda x: all([c > 1 for v in x['c']]))
所以给定一个多索引数据框,我想 return 只有满足多索引中较低索引的所有级别的条件的行。这是一个小的工作示例:
df = pd.DataFrame({'a': [1, 1, 2, 2], 'b': [1, 2, 3, 4], 'c': [0, 2, 2, 2]})
df = df.set_index(['a', 'b'])
print(df)
输出:
c
a b
1 1 0
2 2
2 3 2
4 2
现在,我想 return c > 1
的条目。例如,我想做一些像
df[df[c > 1]]
输出:
c
a b
1 2 2
2 3 2
4 2
但是我想得到
输出:
c
a b
2 3 2
4 2
关于如何以最有效的方式做到这一点有什么想法吗?
我最终使用了 groupby
:
df.groupby(level=0).filter(lambda x: all([c > 1 for v in x['c']]))