python—如何高效地按列值遍历大型 Dataframe ,并重新连接在一起

p4rjhz4m  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(155)

我正在从sql导入一个数据框,其中包含4k个股票报价器,每天的价格数据跨越20年(大约1300万行x 8列)。我的目标是按股票代码遍历该表,并应用技术分析,如移动平均线、轴心点和其他日常操作。从效率的Angular 来看,我也不确定是否有必要将这些列追加回原始数据框,或者将它们存储在新的数据框中,以输入到新表中,然后将其连接回每日价格表。
数据快照:

我正在处理的代码(dataframe=sc,其中sc是数据的较小子集,用于首先确认指标是否按预期工作)

ticks = sc['Tick'].tolist()
for tick in ticks:
     sc['SMA'] = round(talib.SMA(sc[sc["Tick"]==tick]['Adj_close']),2)
   # sc['NextIndicator'] = code_for_next_indicator

这只是将输出分配给最后一个运行ticker(在本例中,我取消了tick=se处的查询)

我还担心从效率的Angular 来处理这一问题的最佳方法,比如说,如果我想应用20或30个指标,这将增加相当多的栏。创建一个空数据框并遍历每个ticker来存储日期ticker id和20-30个指示符是否更有意义?
将指标输出输入新数据框的代码(输出是一个列表,不确定如何将其合并回唯一的数据框)

ndf = []
for tick in ticks:
    ID = sc[sc["Tick"]==tick]["Tick"]
    DATE = sc[sc["Tick"]==tick]["Date"]
    SMA = round(talib.SMA(sc[sc["Tick"]==tick]['Adj_close']),2)
    EMA = round(talib.EMA(sc[sc["Tick"]==tick]['Adj_close']),2)
    #ndf['Next_Indicator'] = next_indicator_logic

    tempdf = pd.concat([ID, DATE, SMA, EMA], axis=1)
    ndf.append(tempdf)

输出:

总之,想知道将输出粘贴回原始 Dataframe 或输入新 Dataframe 是否更有效。最终目标是将表添加回sql db。
将测试数据编辑为文本:

Date    Open    High    Low Close   Adj_close   Volume  Tick
520812  2021-01-04  133.52  133.61  126.76  129.41  129.00  143301900   AAPL
519803  2021-01-04  222.53  223.00  214.81  217.69  216.69  37130100    MSFT
520780  2021-01-04  3270.00 3272.00 3144.02 3186.63 3186.63 4411400 AMZN
520371  2021-01-04  274.78  275.00  265.20  268.94  268.94  15106100    FB
520260  2021-01-04  1757.54 1760.65 1707.85 1728.24 1728.24 1901900 GOOG
514036  2021-01-05  1725.00 1747.67 1718.02 1740.92 1740.92 1145300 GOOG
513835  2021-01-05  268.29  272.40  268.21  270.97  270.97  9871600 FB
513380  2021-01-05  3166.01 3223.38 3165.06 3218.51 3218.51 2655500 AMZN
513276  2021-01-05  128.89  131.74  128.43  131.01  130.59  97664900    AAPL
514403  2021-01-05  217.26  218.52  215.70  217.90  216.90  23823000    MSFT
513162  2021-01-06  127.72  131.05  126.38  126.60  126.20  155088000   AAPL
513128  2021-01-06  3146.48 3197.51 3131.16 3138.38 3138.38 4394800 AMZN
512731  2021-01-06  262.00  267.75  260.01  263.31  263.31  24354100    FB
512612  2021-01-06  1702.63 1748.00 1699.00 1735.29 1735.29 2602100 GOOG
512163  2021-01-06  212.17  216.49  211.94  212.25  211.27  35930700    MSFT
506752  2021-01-07  214.04  219.34  213.71  218.29  217.29  27694500    MSFT
506385  2021-01-07  1740.06 1788.40 1737.05 1787.25 1787.25 2265000 GOOG
506184  2021-01-07  265.90  271.61  264.78  268.74  268.74  15789800    FB
505729  2021-01-07  3157.00 3208.54 3155.00 3162.16 3162.16 3514500 AMZN
505625  2021-01-07  128.36  131.63  127.86  130.92  130.50  109578200   AAPL

初始化小 Dataframe 的代码:

fb_data = {'Date':['2021-07-01', '2021-07-02', '2021-07-03', '2021-07-04'],
        'Tick':['FB', 'FB', 'FB', 'FB'],
        'Close':[345,346,347.5,346.4]}
aapl_data = {'Date':['2021-07-01', '2021-07-02', '2021-07-03', '2021-07-04'],
        'Tick':['AAPL', 'AAPL', 'AAPL', 'AAPL'],
        'Close':[142,145,147.5,146.4]}
df = pd.DataFrame(fb_data)
df2 = pd.DataFrame(aapl_data)
df=df.append(df2, ignore_index=True)
df

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题