我有一个看起来像这样的multiIndexed数据框:
df.head():
如何选择第一个索引==“特定学校名称”的所有行以及所有第二个索引,其中Month列==“Jan”?
之前我还没有使用过multiIndexed数据帧,我可以像这样选择Month ==“Jan”的所有行:
df[df['Month'] == 'Jan']
但这给了我所有的学校。我一直在玩它,但还没能为一所学校添加索引。那么这是如何工作的?
编辑:好的,这样可行:df[df['Month'] == 'Mar'].loc["School Name"]
,但这是否有更惯用的方式,或者这是标准方式?
答案 0 :(得分:4)
您可以使用query
:
print (df.query('ilevel_0 == "School Name" and Month == "Jan"'))
样品:
df = pd.DataFrame({'A':['School Name','Agona','another'],
'B':[0,1,2],
'Month':['Jan', 'Jan', 'Feb']}).set_index(['A','B'])
df.index.names = [None, None]
print (df)
Month
School Name 0 Jan
Agona 1 Jan
another 2 Feb
print (df.query('ilevel_0 == "School Name" and Month == "Jan"'))
Month
School Name 0 Jan
print (df.query('ilevel_0 == "School Name" & Month == "Jan"'))
Month
School Name 0 Jan
boolean indexing
的解决方案:
mask = (df.index.get_level_values(0) == 'School Name') & (df['Month'] == 'Jan')
print (df[mask])
Month
School Name 0 Jan
编辑:
使用变量@
:
var = 'School Name'
print (df.query('ilevel_0 == @var & Month == "Jan"'))
Month
School Name 0 Jan