如何将迭代(来自每个迭代器)结果附加到包含所有迭代结果的最终 Dataframe?

How to append iteration (from each iter.) results to final Dataframe containing all iteration results?

我正在尝试将计算矩阵的结果附加到我的 df。而且我无法从更大的角度了解如何设计我的计算迭代。我有以下代码可以举例说明我正在尝试做的事情。

import pandas as pd
from pandas import DataFrame
import numpy as np

np_all = np.array([[1, 'vws.co', 1],
                    [1, 'nflx', 3],
                    [1, 'aapl', 2],
                    [2, 'vws.co', 1],
                    [2, 'nflx', 2],
                    [2, 'aapl', 1],
                    [3, 'vws.co', 1],
                    [3, 'nflx', 3],
                    [3, 'aapl', 1]])


df_all = pd.DataFrame(data=np_all, columns=['Date', 'Ticker', 'Close'])
df_all = df_all.sort(['Ticker','Date'], ascending=[1,1])

df_kpi_list = []
stocklist   = ['vws.co','nflx','aapl']

print (df_all)

def screener(df_all,ticker):

    # Copy df_all to df for single ticker operations
    df = df_all
    # filter to only relevant ticker
    df = df[df['Ticker'] == ticker]
    df = df[df.Ticker == ticker.lower()]


    def kpi1_calc(df,ticker):

        # do some KPI calculation that are appended to new columns of df
        pass

        def kpi2_calc(df,ticker):

            # do more KPI calculation that are appended to new columns of df
            pass

            def kpi3_calc(df,ticker):
                # example of more KPI calculation that are appended to new columns of df


                # Add content to df - RSI
                rsi = 3  # stupid example of a constant that is stored in df column
                r = rsi
                # add a RSI column
                r['RSI'] = rsi
                df_kpi_list.append(r)

                return df
            return df
        return df

    # concatenate all the ticker-iteration dfs from df_kpi_list into one df_all
    df_all = pd.concat(df_kpi_list)

    return df_all

if __name__ == '__main__':
    for ticker in stocklist:
        df_data = screener(df_all, ticker)

    print (df_data)

我有几层复杂的数据:

  1. df_kpi_list = [] 是一个空列表,特定代码的 dfs 将附加到该列表,因此我可以将它们连接到一个新的包含所有内容的 df_all 最后。
  2. df_all 是一个包含我所有股票信息的 df(时间序列数据股票信息的多个代码信息)
  3. df 相同的信息,但现在过滤为仅迭代相关的代码
  4. 上面的 df (pr ticker) 将为每个 kpi[no]_calc 函数添加更多信息并添加列 - 并且应该添加到列表中:df_kpi_list = []

处理正在计算的这些信息并最终汇总成一个无所不包的 df_all 的最聪明的方法是什么?

确保 df = df_all

请复制内容,而不要仅作参考。以后它可能会搞砸你的计算。

一般有两种方法:

  1. 边做边计算
  2. 将结果保存在列表中,然后对列表求和