Использование iloc для поиска ячеек для расчета - PullRequest
0 голосов
/ 28 августа 2018

У меня есть датафрейм панд, 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

Есть два ряда для каждого тикера.

Вот что у меня есть:

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 голосов
/ 28 августа 2018

Я думаю, вы можете просто сделать

df7.groupby('ticker')['eps_median_est'].apply(lambda g: g.iloc[-1] - g.iloc[-2])
0 голосов
/ 28 августа 2018

Вы можете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...