我有一个多层次的pandas数据框,如下所示。对于给定属性,attr(' rh',' T'' V')如何设置某些值(比如值> 0.5)对于pLevs的 整套 的NaN?我已经看到了如何设置特定列的答案(例如,df [' rh',50]),但还没有看到如何选择整个集合。
attr rh T V pLev 50 75 100 50 75 100 50 75 100 refIdx 0 0.225026 0.013868 0.306472 0.144581 0.379578 0.760685 0.686463 0.476179 0.185635 1 0.496020 0.956295 0.471268 0.492284 0.836456 0.852873 0.088977 0.090494 0.604290 2 0.898723 0.733030 0.175646 0.841776 0.517127 0.685937 0.094648 0.857104 0.135651 3 0.136525 0.443102 0.759630 0.148536 0.426558 0.731955 0.523390 0.965385 0.094153
为方便协助,我在此处包含了创建数据框的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random((4,9)))
df.columns = pd.MultiIndex.from_product([['rh','T','V'],[50,75,100]])
df.columns.names = ['attr', 'pLev']
df.index.name = 'refIdx'
答案 0 :(得分:0)
符号有点令人讨厌,但您可以使用IndexSlice
df.loc[:,pd.IndexSlice['rh',:]]=np.nan
答案 1 :(得分:0)
如果您的“给定属性”为'rh'
,那么您可以使用以下内容获取横截面:
df_xs = df.xs('rh', level='attr', axis=1, drop_level=False)
然后您可以按如下方式更新原始df
:
df[df_xs > 0.5] = np.nan
这是有效的,因为drop_level=False
已经.xs