Как создать новый фрейм данных по отсортированным данным - PullRequest
0 голосов
/ 08 декабря 2018

Я хотел бы узнать строку, которая удовлетворяет условию RSI < 25.Тем не менее, результат генерируется с одним кадром данных.Можно ли создать отдельные кадры данных для одной строки?

Спасибо.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas_datareader import data as wb

stock='TSLA'

ck_df = wb.DataReader(stock,data_source='yahoo',start='2015-01-01')

rsi_period = 14

chg = ck_df['Close'].diff(1)

gain = chg.mask(chg<0,0)
ck_df['Gain'] = gain

loss = chg.mask(chg>0,0)
ck_df['Loss'] = loss

avg_gain = gain.ewm(com = rsi_period-1,min_periods=rsi_period).mean()
avg_loss = loss.ewm(com = rsi_period-1,min_periods=rsi_period).mean()

ck_df['Avg Gain'] = avg_gain
ck_df['Avg Loss'] = avg_loss

rs = abs(avg_gain/avg_loss)

rsi = 100-(100/(1+rs))

ck_df['RSI'] = rsi

RSIFactor = ck_df['RSI'] <25

ck_df[RSIFactor]

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Чтобы разделить строки, найденные решением @ Omkar, на отдельные кадры данных, вы можете использовать эту функцию, взятую отсюда: Pandas: разбить кадр данных на несколько кадров данных по количеству строк ;

def split_dataframe_to_chunks(df, n):
    df_len = len(df)
    count = 0
    dfs = []

    while True:
        if count > df_len-1:
            break

        start = count
        count += n
        dfs.append(df.iloc[start : count])
    return dfs

При этом вы получите список данных.

0 голосов
/ 08 декабря 2018

Если вы хотите узнать, по какому индексу RSI <25, просто используйте: </p>

ck_df[ck_df['RSI'] <25].index

Результатом также будет фрейм данных.Если вы настаиваете на создании нового, то:

new_df = ck_df[ck_df['RSI'] <25].copy()

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