python - MultiIndex 上列级别上的 Pandas GroupBy 和 max

标签 python pandas dataframe group-by multi-index

我正在尝试获取 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/

相关文章:

Python3 将值附加到数组,但前提是它不是 None

Python While 循环中的范围错误

python - Pandas :如何找到每行最频繁的值?

python - 根据 pandas 中的列和数据透视中的一组查找最大值行

python - 如何在 GroupBy 中满足逻辑条件的 "collapse"行

python - 在 Python 仿真中使用嵌入式 C 库

python - 如何在 Python DataFrame 中的确定行之前添加空行?

python - 过滤掉另一列字符串的某一行中包含字符串字段的行

python - 如何在python中为OneHotEncoded值和hashlib创建签名数字?

python - 如何在Python中将纬度/经度值转换为十进制?