我的数据如下所示,它是一个多级熊猫数据框,我正在尝试对其进行一些操作;但需要帮助才能访问特定级别...
print(df.head())
FB AMZN \
open high low close volume open high low
date
2017-01-03 116.03 117.84 115.51 116.86 20663912 757.92 758.76 747.70
2017-01-04 117.55 119.66 117.29 118.69 19630932 758.39 759.68 754.20
2017-01-05 118.86 120.95 118.32 120.67 19492150 761.55 782.40 760.26
2017-01-06 120.98 123.88 120.03 123.41 28545263 782.36 799.44 778.48
2017-01-09 123.55 125.43 123.04 124.90 22880360 798.00 801.77 791.77
... GOOG \
close volume ... open high low close volume
date ...
2017-01-03 753.67 3521066 ... 778.81 789.63 775.80 786.14 1657268
2017-01-04 757.18 2510526 ... 788.36 791.34 783.16 786.90 1072958
2017-01-05 780.45 5830068 ... 786.08 794.48 785.02 794.02 1335167
2017-01-06 795.99 5986234 ... 795.26 807.90 792.20 806.15 1640170
2017-01-09 796.92 3446109 ... 806.40 809.97 802.83 806.65 1274645
TSLA
open high low close volume
date
2017-01-03 214.86 220.33 210.96 216.99 5923254
2017-01-04 214.75 228.00 214.31 226.99 11213471
2017-01-05 226.42 227.48 221.95 226.75 5911695
2017-01-06 226.93 230.31 225.45 229.01 5527893
2017-01-09 228.97 231.92 228.00 231.28 3979484
[5 rows x 25 columns]
此外,有关级别的更多信息:
df.columns.levels
FrozenList([['FB', 'AMZN', 'NFLX', 'GOOG', 'TSLA'], ['open', 'high', 'low', 'close', 'volume']])
我想一次遍历此数据框,一次股票行情自动收录器,然后在“关闭”列上执行操作。例如,
for stock_ticker in df:
print(stock_ticker) #print stock name
if 'close' <= 100: # if the 'close' column for the specific stock ticker is <= 100
print(stock_ticker is less than or equal to 100)
else:
print(stock_ticker is greater than 100)````
我正在寻找与此相关的更复杂的事情;但是,这段代码可以带我到那里。
答案 0 :(得分:2)
在MultiIndex上访问级别的某个值时,简单的方法是将pd.IndexSlice
与loc
一起使用。在您的情况下,请执行以下操作(注意:我仅使用您示例中的FB
和AMZN
)
ix = pd.IndexSlice
df1 = df.loc[:, (ix[:],'close')]
或
df1 = df.loc[:, ix[:,'close']]
Out[88]:
FB AMZN
close close
0
2017-01-03 116.86 753.67
2017-01-04 118.69 757.18
2017-01-05 120.67 780.45
2017-01-06 123.41 795.99
2017-01-09 124.90 796.92
因此,df1
是每个close
的{{1}}列。只需对ticker
执行所有逻辑即可。