我正在尝试获取 Pandas 多列索引数据框中每行的最大 2 列。
我已将多个股票数据加载到 Pandas 中,并且正在尝试获取每只股票每天的收盘价和开盘价的最大值。
我给出的例子是我真正想做的一个简单的例子,所以如果有人能给我一个不需要遍历每一列或行并且有一个解决方案的解决方案,我将不胜感激。运行时间快。
# import libaries
import pandas as pd
import datetime
from dateutil.relativedelta import relativedelta
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf
#declare dates
end_date = datetime.date.today()
start_date = end_date - relativedelta(days=3)
#load stock data (this code sometimes brings an error, just rerun it and it should work within a few tries)
yf.pdr_override()
df = pdr.get_data_yahoo(['AAPL','FB'], start_date, end_date)
print(df)
输出:
Open Close
AAPL FB AAPL FB
Date
2019-05-29 176.42 183.50 177.38 182.19
2019-05-30 177.95 183.08 178.30 183.01
2019-05-31 176.23 180.28 175.07 177.47
期望的输出:
Open Close Max
AAPL FB AAPL FB AAPL FB
Date
2019-05-29 176.42 183.50 177.38 182.19 177.38 183.50
2019-05-30 177.95 183.08 178.30 183.01 178.30 183.08
2019-05-31 176.23 180.28 175.07 177.47 176.23 180.28
提前致谢!
最佳答案
IMO 的最佳解决方案是将 groupby
与列中的 level
参数一起使用:
u = df.groupby(level=1, axis=1).max()
或者,更具体地说,
u = df[['Open','Close']].groupby(level=1, axis=1).max()
u
AAPL FB
Date
2019-05-29 177.38 183.50
2019-05-30 178.30 183.08
2019-05-31 176.23 180.28
现在,修复列并连接结果。
u.columns = pd.MultiIndex.from_product([['Max'], u.columns])
pd.concat([df, u], axis=1)
Open Close Max
AAPL FB AAPL FB AAPL FB
Date
2019-05-29 176.42 183.50 177.38 182.19 177.38 183.50
2019-05-30 177.95 183.08 178.30 183.01 178.30 183.08
2019-05-31 176.23 180.28 175.07 177.47 176.23 180.28
关于python - MultiIndex 上列级别上的 Pandas GroupBy 和 max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421249/