从现有数据帧的行子集创建新的 Pandas 数据帧

我是 Python 和 Pandas 的新手。我有一个 Pandas 数据框,由许多股票(例如 S&P 500)的多年时间序列数据组成。我想逐个迭代每个唯一的股票代码并计算收盘价的技术指标。我一直在尝试从主数据框中为每只独特的股票创建一个新的数据框及其所有价格历史,然后将其传递给一个方法,该方法将进行技术分析而不是传递主数据框。这是我的数据框中的一些示例数据:


Id      Symbol       Date       Open       High        Low      Close   Volume

1       A99     2012-01-02    730.019    730.019    730.019    730.019       0

2       ABA     2012-01-02      4.200      4.200      4.200      4.200       0

3       AFI     2012-01-02      5.360      5.360      5.360      5.360       0

4       AIA     2012-01-02      2.520      2.520      2.520      2.520       0

...

501     A99     2012-01-03    730.019    730.019    730.019    730.019       0

...

我尝试过 loc、iloc 和 groupby 等索引器,但没有运气。我已经阅读了很多文章,例如 根据 Pandas 中列中的值从 DataFrame 中选择行, 但没有一篇完全符合我的要求。所有这些的主要问题是你必须有一个文字搜索条件,而我想要一个变量过滤器名称,即股票名称。我的数据表示例如下:


这是我当前不起作用的代码片段:


# 从数据库中获取数据 df = stockPrices.get_data()


# Create technical indicators for each distinct stock

# First get a series of all unique stock codes

ts = pd.Series(df.Symbol.unique())


# Iterate through the series and call the technical indicator method

for row in ts:

    # filter for just this stock

    filtered_df = df.loc[df['Symbol'] == row]

    df = stockPrices.calc_technicals(filtered_df, row)

任何指针将不胜感激。


aluckdog
浏览 164回答 2
2回答

ibeautiful

选择所有匹配符号的行作为“A99”filtered_df = df.loc[df['Symbol'] == 'A99']也可以尝试:filtered_df = df.loc[df['Symbol'].isin('A99')]

波斯汪

你的代码没有错。group_by不适合这里,因为没有组操作。请检查您的方法stockPrices.calc_technicals。df=pd.DataFrame({'symbol':['a','a','a','b','b'],'v':[1,2,3,4,5]})ts=pd.Series(df.symbol.unique())for i in ts:    filtered_df=df.loc[df.symbol==i]    print(filtered_df)  symbol  v0      a  11      a  22      a  3  symbol  v3      b  44      b  5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python