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

2024-04-26 13:03:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个有Python和熊猫的新手。我有一个由许多股票的多年时间序列数据组成的熊猫数据框架,例如S&;第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这样的索引器,但没有成功。我读过很多文章。 Select rows from a DataFrame based on values in a column in pandas 但是没有一个完全符合我的要求。所有这些的主要问题是你必须有一个文字搜索条件,而我需要一个变量过滤器名称,即股票名称。我的数据表示例如下:

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

#从数据库中获取数据 df=股票价格。获取_数据()

# 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)

任何指点都将不胜感激


Tags: 数据方法indfforstocksymbolloc
2条回答

选择与符号“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  v
0      a  1
1      a  2
2      a  3
  symbol  v
3      b  4
4      b  5

相关问题 更多 >