определение запаса в наборе акций и применение числовых операций для конкретного запаса в обратном порядке - PullRequest
0 голосов
/ 16 октября 2019

Скажем, у меня есть датафрейм, как показано ниже

   Stock     open     high      low    close          Avg
0   SBIN   255.85   256.00   255.80   255.90          Nan
1   HDFC  1222.25  1222.45  1220.45  1220.45          Nan
2   SBIN   255.95   255.95   255.85   255.85          Nan
3   HDFC  1222.00  1222.50  1221.70  1221.95          Nan
4   SBIN   255.80   256.00   255.80   255.95        255.9
5   HDFC  1221.90  1222.00  1221.55  1221.70  1221.366667
6   SBIN   255.85   255.95   255.70   255.80  255.8666667
7   HDFC  1222.00  1222.00  1221.45  1221.95  1221.866667
8   SBIN   255.80   255.95   255.70   255.80       255.85
9   HDFC  1222.00  1222.00  1221.25  1221.90      1221.85
10  SBIN   255.75   255.80   255.60   255.65       255.75
11  HDFC  1222.00  1222.00  1221.40  1221.80  1221.88333333

вот ссылка на df, который я снял с экрана. https://photos.app.goo.gl/kTZERCerFzggDfHEA

Теперь средний столбец - это среднее значение трех предыдущих закрытий для этой конкретной акции. Как я могу достичь этого в Python Pandas?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы можете использовать groupby и rolling

df['Avg'] = df.groupby('Stock', as_index=False)['close'].rolling(3).mean().reset_index(0,drop=True)

df

Out[1]: 
   Stock     open     high      low    close          Avg
0   SBIN   255.85   256.00   255.80   255.90          NaN
1   HDFC  1222.25  1222.45  1220.45  1220.45          NaN
2   SBIN   255.95   255.95   255.85   255.85          NaN
3   HDFC  1222.00  1222.50  1221.70  1221.95          NaN
4   SBIN   255.80   256.00   255.80   255.95   255.900000
5   HDFC  1221.90  1222.00  1221.55  1221.70  1221.366667
6   SBIN   255.85   255.95   255.70   255.80   255.866667
7   HDFC  1222.00  1222.00  1221.45  1221.95  1221.866667
8   SBIN   255.80   255.95   255.70   255.80   255.850000
9   HDFC  1222.00  1222.00  1221.25  1221.90  1221.850000
10  SBIN   255.75   255.80   255.60   255.65   255.750000
11  HDFC  1222.00  1222.00  1221.40  1221.80  1221.883333
0 голосов
/ 16 октября 2019

Как я понял из вашего df, вы пытаетесь вычислить что-то вроде показателя скользящей средней.

Для этого вы можете просто использовать для итерации:

for i in range(0, df.shape[0] - 2):
    df.loc[df.index[i + 2], 'AVG'] = np.round(((df.iloc[i, 1] + df.iloc[i + 1, 1] + df.iloc[i + 2, 1]) / 3), 1)

Где в выражениях pd.loc вы указываете столбцы, по которым вы хотите вычислить метрику, я использовал собственный.

Также (если вам нужна более конкретная метрика) вы можете попытаться вычислить среднее значение, используя метод прокрутки:

df['AVG'] = df.iloc[:, 1].rolling(window = 3).mean()

Вместо 1 вы должны использовать столбцы, по которым вы хотите рассчитать метрику. В столбце окна вы указываете количество предыдущих столбцов, по которым вы хотите рассчитать это.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...