为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2021-10-10 14:04:42
我是 Python 和 Pandas 的新手。我有一个 Pandas 数据框,由许多股票(例如 S&P 500)的多年时间序列数据组成。我想逐个迭代每个唯一的股票代码并计算收盘价的技术指标。我一直在尝试从主数据框中为每只独特的股票创建一个新的数据框及其所有价格历史,然后将其传递给一个方法,该方法将进行技术分析而不是传递主数据框。这是我的数据框中的一些示例数据:Id      Symbol       Date       Open       High        Low      Close   Volume1       A99     2012-01-02    730.019    730.019    730.019    730.019       02       ABA     2012-01-02      4.200      4.200      4.200      4.200       03       AFI     2012-01-02      5.360      5.360      5.360      5.360       04       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 codests = pd.Series(df.Symbol.unique())# Iterate through the series and call the technical indicator methodfor row in ts:    # filter for just this stock    filtered_df = df.loc[df['Symbol'] == row]    df = stockPrices.calc_technicals(filtered_df, row)任何指针将不胜感激。
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

选择所有匹配符号的行作为“A99”

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

也可以尝试:

filtered_df = df.loc[df['Symbol'].isin('A99')]


查看完整回答
反对 回复 2021-10-10
?
波斯汪

TA贡献1811条经验 获得超4个赞

你的代码没有错。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


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信