最近,我开始使用pandas进行简单的数据分析任务。所以问题可能是愚蠢的,但我不得不问它。
我的数据如下:
0 1 2
ix increasing ix increasing ix increasing
noname vtg
name1 -0.500 0.000109 True 0.000158 False 0.000153 True
-0.498 0.000130 True 0.000154 False 0.000158 True
-0.496 0.000141 True 0.000153 False 0.000158 True
-0.494 0.000124 True 0.000154 False 0.000154 True
-0.492 0.000109 True 0.000151 False 0.000154 True
我需要和' ix'列如果增加'相应的键值为True。
我发现这只是一种丑陋的方式:
idx = pd.IndexSlice
qq = data.loc[idx[::, idx[::, 'increasing']]].apply(lambda x: True if all(x) else False, axis=0)
然后
data.loc[idx[::, idx[list(qq.loc[qq==True].index.labels[0]), 'ix']]]
给出所有列' ix'真正的价值在增加'。我想应该有一个像这样做的熊猫。
提前致谢!
答案 0 :(得分:1)
qq = data.xs('increasing', axis=1, level=1).all()
print (qq)
0 True
1 False
2 True
dtype: bool
然后选择第二级并按loc
过滤:
df = data.xs('ix', axis=1, level=1).loc[:, qq]
print (df)
0 2
name1 -0.500 0.000109 0.000153
-0.498 0.000130 0.000158
-0.496 0.000141 0.000158
-0.494 0.000124 0.000154
-0.492 0.000109 0.000154
如果列中也需要MultiIndex
:
df = data.xs('ix', axis=1, level=1, drop_level=False).loc[:, qq.values]
print (df)
0 2
ix ix
name1 -0.500 0.000109 0.000153
-0.498 0.000130 0.000158
-0.496 0.000141 0.000158
-0.494 0.000124 0.000154
-0.492 0.000109 0.000154