【问题标题】:How to create a new dataframe by sorted data如何通过排序数据创建新的数据框
【发布时间】:2018-12-08 05:21:29
【问题描述】:

我想找出满足条件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]

【问题讨论】:

标签: python pandas python-2.7


【解决方案1】:

如果您想知道 RSI

ck_df[ck_df['RSI'] &lt;25].index

结果也将是一个数据框。如果你坚持做一个新的,那么:

new_df = ck_df[ck_df['RSI'] &lt;25].copy()

【讨论】:

  • 感谢您的帮助:) 是否可以将其分开。
  • 我不确定我是否理解,你要分离什么?
  • 感谢您的及时回复。我的意思是一个数据框一个排序的行因此,应该有new_df1、new_df2、new_df3等。谢谢
  • 每一行本身就是一个数据框,所以你的 new_df1 = new_df.iloc[0],new_df2 = new_df.iloc[1]。虽然这似乎违反直觉,但您可以写一些关于您为什么要那样做的东西,也许有更好的解决方案。
  • 其实我想找到如下数据。对 RSI
【解决方案2】:

要将@Omkar 的解决方案找到的行拆分为单独的数据框,您可以使用从此处获取的此函数:Pandas: split dataframe into multiple dataframes by number of rows;

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

这样你就得到了一个数据框列表。

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2021-01-06
    • 2020-02-29
    • 2021-11-02
    • 2021-12-09
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多