Python 如何在熊猫中选择一个级别和所有子级别(和项目)?
我有一个多级Python 如何在熊猫中选择一个级别和所有子级别(和项目)?,python,pandas,Python,Pandas,我有一个多级数据帧: year month Open High Low Close 2018 1 25565.75 27379.45 27652.05 25232.80 2 27334.85 25107.40 27613.50 24781.70 3 25022.35 24263.35 25226.05 23605.60 4 24235.65 25531.60 25617.
数据帧
:
year month Open High Low Close
2018 1 25565.75 27379.45 27652.05 25232.80
2 27334.85 25107.40 27613.50 24781.70
3 25022.35 24263.35 25226.05 23605.60
4 24235.65 25531.60 25617.50 24062.95
5 25607.05 26956.20 27164.55 25469.05
2019 1 27231.40 27720.40 27754.45 26923.75
我正在尝试选择2018
类型(int64)
,并将其制作成一个单独的数据帧
我试过:
df[2017]
我得到一个键错误
df.loc[pd.indexlice[0,'Open']]
这让我得到了所有的公开价格
df.loc[pd.indexlice['year':,'Open']]
df.loc[pd.indexlice['2017','Open']]
它们似乎不起作用
如何访问这些级别?记住它们是int64类型的吗
预期产出:
month Open High Low Close
1 25565.75 27379.45 27652.05 25232.80
2 27334.85 25107.40 27613.50 24781.70
3 25022.35 24263.35 25226.05 23605.60
4 24235.65 25531.60 25617.50 24062.95
5 25607.05 26956.20 27164.55 25469.05
如果还有另一个级别,我将如何访问两个级别的数据
谢谢您需要seelct索引,因此需要
loc
:
df = df.loc[2018]
或使用:
或者,如果需要,选择第二级中的所有值需要:
:
df = df.loc[pd.IndexSlice[2018,:]]
print (df)
Open High Low Close
month
1 25565.75 27379.45 27652.05 25232.80
2 27334.85 25107.40 27613.50 24781.70
3 25022.35 24263.35 25226.05 23605.60
4 24235.65 25531.60 25617.50 24062.95
5 25607.05 26956.20 27164.55 25469.05
您还可以将
iloc
与get\u level\u值一起使用:
2018_df = df.iloc[df.index.get_level_values('year') == 2018].reset_index(level=0, drop=True)
Open High Low Close
month
1 25565.75 27379.45 27652.05 25232.80
2 27334.85 25107.40 27613.50 24781.70
3 25022.35 24263.35 25226.05 23605.60
4 24235.65 25531.60 25617.50 24062.95
5 25607.05 26956.20 27164.55 25469.05
或者,如果要访问其他级别:
month_1_df = df.iloc[df.index.get_level_values('month') == 1].reset_index(level=1, drop=True)
Open High Low Close
year
2018 25565.75 27379.45 27652.05 25232.80
2019 27231.40 27720.40 27754.45 26923.75
或者要访问多个级别,请使用转置
:
df.T.loc[:, (2018, 3)].to_frame().T
Open High Low Close
2018 3 25022.35 24263.35 25226.05 23605.6
现在,您可以选择您想要的任何列:df.T.loc[:,(2018,3)]。to_frame().T['Open',Close']
请交叉检查您试图访问的是2017而不是2018。谢谢@Lalit,datframe更大,2018也在索引中。我打错了。在这里,但奇怪的是,它现在起作用了。
df.T.loc[:, (2018, 3)].to_frame().T
Open High Low Close
2018 3 25022.35 24263.35 25226.05 23605.6