我有一个熊猫数据框df7
,部分看起来像这样:
ticker obs_date eps_median_est
448 HTHT 2018-07-27 0.240
449 HTHT 2018-08-15 0.170
261 TEAM 2018-07-26 0.010
262 TEAM 2018-08-19 -0.015
我的目标是从最近的减去esp_median_est。例如在HTHT中:.17-.24 = -.07
每个“ ticker”都有两行。
这是我到目前为止所拥有的:
for each in symbol_list[0:]:
df8 = df7.loc[df7.ticker == each]
df8 = df8.tail(2)
df9.eps_chg = (( df8.iloc[1,2] - df8.iloc[0,2] ) / df8.iloc[1,2] ) *100
df10 = pd.concat([df10,df9],sort=False)
错误是IndexError:单个位置索引器超出范围。 我要去哪里错了?
答案 0 :(得分:2)
您可以groupby
标记,从tail(1)
中减去head(1)
,以得到第一项和最后一项之间的差。
df7.groupby('ticker').eps_median_est.apply(lambda x: x.head(1).item() - x.tail(1).item())
ticker
HTHT 0.070
TEAM 0.025
Name: eps_median_est, dtype: float64
如果您想要最后两个值之间的差,可以执行tail(2)
和diff()
df.groupby('ticker').eps_median_est.apply(lambda x: x.tail(2).diff().dropna().item())
ticker
HTHT -0.070
TEAM -0.025
Name: eps_median_est, dtype: float64
答案 1 :(得分:0)
我想你可以做
df7.groupby('ticker')['eps_median_est'].apply(lambda g: g.iloc[-1] - g.iloc[-2])