Pandas GroupBy和max在MultiIndex上列级别

时间:2019-06-03 04:42:40

标签: 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

谢谢!

2 个答案:

答案 0 :(得分:0)

只需尝试使用此

使用max关键字比较数据框中的两个或更多列。

import pandas as pd

df = pd.DataFrame({"A": [1, 2, 3], "B": [-2, 8, 1], "C": [1, 2, 3], "D": [-2, 8, 1]})
df["E"] = df[["A", "B"]].max(axis=1)
df["F"] = df[["C", "D"]].max(axis=1)
print(df)

Output:

    A   B   C   D   E   F
0   1   -2  1   -2  1   1
1   2   8   2   8   8   8
2   3   1   3   1   3   3

答案 1 :(得分:0)

最佳解决方案IMO在列中将std::vector参数与/* DO NOT FORGET! The ViewPager requires at least “1” minimum OffscreenPageLimit */ int limit = (mAdapter.getCount() > 1 ? mAdapter.getCount() - 1 : 1); mViewPager.setOffscreenPageLimit(limit); 一起使用:

groupby

或更具体地说,

level

现在,修复列并连接结果。

u = df.groupby(level=1, axis=1).max()