python - 在同一 df 中的 df col 行中仅选择一个值,以获取不同 val 的计算结果,并且一次仅对一个股票代码进行计算 df

标签 python python-3.x pandas

我尝试计算不同公司/股票的一些 KPI。我的股票信息位于 df 中,具有以下结构

            Ticker        Open        High         Low   Adj Close   Volume
Date                                                                       
2015-04-09  vws.co  315.000000  316.100000  312.500000  311.520000  1686800
2015-04-10  vws.co  317.000000  319.700000  316.400000  312.700000  1396500
2015-04-13  vws.co  317.900000  321.500000  315.200000  315.850000  1564500
2015-04-14  vws.co  320.000000  322.400000  318.700000  314.870000  1370600
2015-04-15  vws.co  320.000000  321.500000  319.200000  316.150000   945000
2015-04-16  vws.co  319.000000  320.200000  310.400000  307.870000  2236100
2015-04-17  vws.co  309.900000  310.000000  302.500000  299.100000  2711900
2015-04-20  vws.co  303.000000  312.000000  303.000000  306.490000  1629700
...            ...         ...         ...         ...         ...      ...
2016-03-31     mmm  166.750000  167.500000  166.500000  166.630005  1762800
2016-04-01     mmm  165.630005  167.740005  164.789993  167.529999  1993700
2016-04-04     mmm  167.110001  167.490005  165.919998  166.399994  2022800
2016-04-05     mmm  165.179993  166.550003  164.649994  165.809998  1610300
2016-04-06     mmm  165.339996  167.080002  164.839996  166.809998  2092200
2016-04-07     mmm  165.880005  167.229996  165.250000  167.160004  2721900

我需要在每个股票代码的基础上进行计算,这样我在遍历公司/股票代码时就不会扭曲移动平均结果。

有人可以帮我吗?

分割和连接 dfs 我如何在逻辑上将股票代码分离到可能附加股票代码名称的不同 dfs 中,然后如何将它们全部再次附加到一个 df 中?

从相同的 df 中选择 或者仅选择同一 df 中的相关行情? (也许像这样Splitting dataframe into multiple dataframes)

感谢任何帮助...

---------- 来自下面亚历山大的帖子。 这段代码

df['MA1'] = df.groupby('Ticker').df['Adj Close'].transform(lambda group: pd.rolling_mean(group, window=10))

抛出此错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'df'

或更紧密的剪切和粘贴

Adj_Close = df['Adj Close']

df['MA3'] = df.groupby('Ticker').Adj_Close.transform(lambda group: pd.rolling_mean(group, window=3))

不再抛出错误。这是 groupby 不喜欢的带有空格的 col 'Adj Close' 的命名...这一定是一个错误

如果我尝试这个语法,应该可以工作 - 但它不行!

df['MA3'] = df.groupby('Ticker').df["Adj Close"].transform(lambda group: pd.rolling_mean(group, window=3))

并抛出此错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'df'

但我可以使用上面的内容。谢谢亚历山大

最佳答案

您可以在 groupby 对象上使用 transform 来维护具有相同形状的列:

例如,这里是调整收盘价的 3 天移动平均线(Pandas < 0.18.0)。

df['MA3'] = df.groupby('Ticker').Adj_Close.transform(lambda group: pd.rolling_mean(group, window=3))

>>> df
          Date  Ticker  Open  High  Low  Adj_Close   Volume  MA3
0   2015-04-09  vws.co   315   316  312        312  1686800  NaN
1   2015-04-10  vws.co   317   320  316        313  1396500  NaN
2   2015-04-13  vws.co   318   322  315        316  1564500  313
3   2015-04-14  vws.co   320   322  319        315  1370600  314
4   2015-04-15  vws.co   320   322  319        316   945000  316
5   2015-04-16  vws.co   319   320  310        308  2236100  313
6   2015-04-17  vws.co   310   310  302        299  2711900  308
7   2015-04-20  vws.co   303   312  303        306  1629700  304
8   2016-03-31     mmm   167   168  166        167  1762800  NaN
9   2016-04-01     mmm   166   168  165        168  1993700  NaN
10  2016-04-04     mmm   167   167  166        166  2022800  167
11  2016-04-05     mmm   165   167  165        166  1610300  167
12  2016-04-06     mmm   165   167  165        167  2092200  166
13  2016-04-07     mmm   166   167  165        167  2721900  167

关于python - 在同一 df 中的 df col 行中仅选择一个值,以获取不同 val 的计算结果,并且一次仅对一个股票代码进行计算 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37281409/

相关文章:

python - 有没有办法替换长度超过X位的单词的最后N个字母?

python-3.x - 时间序列Python : "Key Error" `start` argument could not be matched

来自包含字典的字典的 Python Pandas 数据框

python - 使用 pandas df 突出显示热图中每列的平均值数据单元格的自定义颜色

python 相当于 ruby​​ bundle

python - 如何从任何用户的推特获取 'n' 推文

python - 迭代一个按指数增长的巨大整数列表,其中指数为 1.5

python - 实例方法的装饰器

python - 可以在 Python 的绘图命令中添加条件语句吗?

python - python创建DDE服务器并持续发送数据