使用iloc查找要计算的单元格

时间:2018-08-27 21:48:54

标签: python pandas

我有一个熊猫数据框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:单个位置索引器超出范围。 我要去哪里错了?

2 个答案:

答案 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])