我有一个如下所示的多索引数据框:
status value
id country
1234 US Complete 54
2345 US Ongoing 3
UK Complete 343
JP Complete 54
IT Complete 32
3456 CA Ongoing 20
UK Complete 123
FR Complete 245
我不确定如何创建ID,以便可以通过其他索引(国家/地区)中的某个字段或其中一个值来过滤ID列。
从本质上讲,如果我希望所有不包含“ US”的索引的所有列都可以,并且可以像这样返回:
status value
id country
3456 CA Ongoing 20
UK Complete 123
FR Complete 245
或者还可以说出“过滤出至少有1个状态正在进行的每个ID”并将其取回:
status value
id country
1234 US Complete 54
最终,我希望能够将其结合起来,但是学习如何单独进行操作可能是一个不错的第一步。
答案 0 :(得分:2)
您的第二个问题,没有Ongoing
sliceidx=~df.index.get_level_values(0).isin(df.loc[df.status=='Ongoing'].index.get_level_values(0))
df[sliceidx]
Out[474]:
status value
id country
1234 US Complete 54
您的第一个问题US
sliceidx=df.index.get_level_values(0)[df.index.get_level_values(1)=='US']
df[~df.index.get_level_values(0).isin(sliceidx)]
Out[478]:
status value
id country
3456 CA Ongoing 20
UK Complete 123
FR Complete 245
更多信息:我通常要做的是reset_index
df1=df.copy().reset_index()
df[df1.country.ne('US').groupby(df1['id']).transform('all').values]
Out[486]:
status value
id country
3456 CA Ongoing 20
UK Complete 123
FR Complete 245
df[df1.status.ne('Ongoing').groupby(df1['id']).transform('all').values]
Out[487]:
status value
id country
1234 US Complete 54