从 pandas groupby 获取 pct_change 的最后一个示例是否适用?
Get last example of pct_change from pandas groupby apply?
我正在使用 yfinance 的财务数据。
df = yf.download("AAPL MSFT", period="60D", interval="5m")
数据如下所示:
AAPL MSFT
Datetime
2021-09-17 09:30:00-04:00 147.880005 303.049103
2021-09-17 09:35:00-04:00 147.669998 302.510010
2021-09-17 09:40:00-04:00 147.470001 303.000000
2021-09-17 09:45:00-04:00 147.320007 302.739990
2021-09-17 09:50:00-04:00 147.179993 301.869995
2021-12-10 15:35:00-05:00 178.179993 341.500000
2021-12-10 15:40:00-05:00 178.339996 341.437012
2021-12-10 15:45:00-05:00 178.460007 341.049988
2021-12-10 15:50:00-05:00 179.059998 342.220001
2021-12-10 15:55:00-05:00 179.500000 342.230011
我想计算每日(营业日)百分比变化。
df.groupby(by=pd.Grouper(freq="B")).apply(lambda x: x.pct_change(periods=len(x)-1).iloc[-1,:])
不用选择最后一个例子用iloc也能正常工作。当我使用 iloc 获取 pct_change 的最后一个示例(对我来说唯一相关的示例)时,我收到此错误:
IndexError: single positional indexer is out-of-bounds
即使对象是带有示例的数据框。
也许你应该使用 dropna
而不是 iloc
pct_change = lambda x: x.pct_change(periods=len(x)-1)
out = df.groupby(by=pd.Grouper(freq="B")).apply(pct_change).dropna()
print(out)
# Output:
AAPL MSFT
Datetime
2021-09-17 15:55:00-04:00 -0.012510 -0.010655
2021-09-20 15:55:00-04:00 -0.009423 -0.007445
2021-09-21 15:55:00-04:00 0.000320 0.000577
...
2021-12-08 15:55:00-05:00 0.021300 0.003535
2021-12-09 15:55:00-05:00 -0.010876 -0.007657
2021-12-10 15:55:00-05:00 0.019597 0.013745
我正在使用 yfinance 的财务数据。
df = yf.download("AAPL MSFT", period="60D", interval="5m")
数据如下所示:
AAPL MSFT
Datetime
2021-09-17 09:30:00-04:00 147.880005 303.049103
2021-09-17 09:35:00-04:00 147.669998 302.510010
2021-09-17 09:40:00-04:00 147.470001 303.000000
2021-09-17 09:45:00-04:00 147.320007 302.739990
2021-09-17 09:50:00-04:00 147.179993 301.869995
2021-12-10 15:35:00-05:00 178.179993 341.500000
2021-12-10 15:40:00-05:00 178.339996 341.437012
2021-12-10 15:45:00-05:00 178.460007 341.049988
2021-12-10 15:50:00-05:00 179.059998 342.220001
2021-12-10 15:55:00-05:00 179.500000 342.230011
我想计算每日(营业日)百分比变化。
df.groupby(by=pd.Grouper(freq="B")).apply(lambda x: x.pct_change(periods=len(x)-1).iloc[-1,:])
不用选择最后一个例子用iloc也能正常工作。当我使用 iloc 获取 pct_change 的最后一个示例(对我来说唯一相关的示例)时,我收到此错误:
IndexError: single positional indexer is out-of-bounds
即使对象是带有示例的数据框。
也许你应该使用 dropna
而不是 iloc
pct_change = lambda x: x.pct_change(periods=len(x)-1)
out = df.groupby(by=pd.Grouper(freq="B")).apply(pct_change).dropna()
print(out)
# Output:
AAPL MSFT
Datetime
2021-09-17 15:55:00-04:00 -0.012510 -0.010655
2021-09-20 15:55:00-04:00 -0.009423 -0.007445
2021-09-21 15:55:00-04:00 0.000320 0.000577
...
2021-12-08 15:55:00-05:00 0.021300 0.003535
2021-12-09 15:55:00-05:00 -0.010876 -0.007657
2021-12-10 15:55:00-05:00 0.019597 0.013745