![](/img/trans.png)
[英]How to use iloc slicing on outermost level in multiindex DataFrame?
[英]python pandas multiIndex Dataframe, how to select one level based on iloc
df = pd.DataFrame(np.random.rand(100, 2),
columns=pd.Index(['A', 'B'], name='bar'),
index=pd.date_range('20160101',
periods=100, freq='D', name='foo'))
corr = df.rolling(12).corr()
在旧版本中,这将返回一个Panel,因此现有代码使用
corr[0,:,:]
返回第一个日期的corr矩阵。
但是,在新版本中,corr是multiIndex DataFrame,并且上面的代码失败。 如何以最小的变化获得相同的输出?
corr.iloc[0] # only returns first row
corr.iloc[0,:,:] # error
编辑:
所需的输出将获得与以下相同的返回值,但不要将.loc
与值一起使用,而应使用.iloc[11]
类的东西(即,对应于日期中第12个值的相关矩阵)
corr.loc['2016-01-12']
bar A B
foo bar
2016-01-12 A 1.000000 -0.115059
B -0.115059 1.000000
那是你要的吗?
In [236]: x = corr.dropna()
In [237]: x.loc[pd.IndexSlice[x.index[0][0], :], :]
Out[237]:
bar A B
foo bar
2016-01-12 A 1.000000 0.158424
B 0.158424 1.000000
@MaxU暗示的问题是.iloc
不是“ MultiIndex-aware”-请参阅此处的讨论。
您的情况的替代解决方案:
dates = corr.index.get_level_values(0).drop_duplicates()
corr.loc[dates[12]] # correl. matrix for 12th date (0-indexed)
保留为DataFrame:
corr.loc[[dates[12]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.