gpt4 book ai didi

python - 如何从多索引数据框中提取特定数据(雅虎股票数据)

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:17 25 4
gpt4 key购买 nike

有人可以给我一个关于如何在下面的多索引数据框中抓取特定数据点的快速/清晰的类(class)吗?我整天都在看教程,但没有一个很有帮助。对于了解 Pandas 的人来说这应该很简单。

我该如何执行以下操作:

  1. 提取数据帧最后日期“AAPL”的“收盘价”

  2. 如果“AAPL”在特定日期的“收盘”>“开盘”,则提取“AAPL”的所有数据并添加到新的数据帧

  3. 为每个交易品种(AAPL、FB)添加一个新列,该列标记为“范围”,并且是每天的“最高价”-“最低价”

.

symbol      AAPL                                                FB
ohlcv open high low close adj volume open high low close adj volume
Date
2018-09-17 222.15 222.95 217.27 217.88 217.88 37195100 161.92 162.06 159.77 160.58 160.58 21005300
2018-09-18 217.79 221.85 217.12 218.24 218.24 31571700 159.39 161.76 158.87 160.30 160.30 22465200
2018-09-19 218.50 219.62 215.30 218.37 218.37 27123800 160.08 163.44 159.48 163.06 163.06 19629000
2018-09-20 220.24 222.28 219.15 220.03 220.03 26460800 164.50 166.45 164.47 166.02 166.02 18824200
2018-09-21 220.78 221.36 217.29 217.66 217.66 96246748 166.64 167.25 162.81 162.93 162.93 25956794

这是数据框的字典,作为下面请求的评论之一,

df = pd.DataFrame({('AAPL', 'adj_close'): {
pd.Timestamp('2018-01-02 00:00:00'): 170.3,
pd.Timestamp('2018-01-03 00:00:00'): 170.27,
pd.Timestamp('2018-01-04 00:00:00'): 171.07,
pd.Timestamp('2018-01-05 00:00:00'): 173.01,
pd.Timestamp('2018-01-08 00:00:00'): 172.37},
('AAPL', 'close'): {
pd.Timestamp('2018-01-02 00:00:00'): 172.26,
pd.Timestamp('2018-01-03 00:00:00'): 172.23,
pd.Timestamp('2018-01-04 00:00:00'): 173.03,
pd.Timestamp('2018-01-05 00:00:00'): 175.0,
pd.Timestamp('2018-01-08 00:00:00'): 174.35},
('AAPL', 'high'): {
pd.Timestamp('2018-01-02 00:00:00'): 172.3,
pd.Timestamp('2018-01-03 00:00:00'): 174.55,
pd.Timestamp('2018-01-04 00:00:00'): 173.47,
pd.Timestamp('2018-01-05 00:00:00'): 175.37,
pd.Timestamp('2018-01-08 00:00:00'): 175.61},
('AAPL', 'low'): {
pd.Timestamp('2018-01-02 00:00:00'): 169.26,
pd.Timestamp('2018-01-03 00:00:00'): 171.96,
pd.Timestamp('2018-01-04 00:00:00'): 172.08,
pd.Timestamp('2018-01-05 00:00:00'): 173.05,
pd.Timestamp('2018-01-08 00:00:00'): 173.93},
('AAPL', 'open'): {
pd.Timestamp('2018-01-02 00:00:00'): 170.16,
pd.Timestamp('2018-01-03 00:00:00'): 172.53,
pd.Timestamp('2018-01-04 00:00:00'): 172.54,
pd.Timestamp('2018-01-05 00:00:00'): 173.44,
pd.Timestamp('2018-01-08 00:00:00'): 174.35},
('AAPL', 'volume'): {
pd.Timestamp('2018-01-02 00:00:00'): 25555900,
pd.Timestamp('2018-01-03 00:00:00'): 29517900,
pd.Timestamp('2018-01-04 00:00:00'): 22434600,
pd.Timestamp('2018-01-05 00:00:00'): 23660000,
pd.Timestamp('2018-01-08 00:00:00'): 20567800},
('FB', 'adj_close'): {
pd.Timestamp('2018-01-02 00:00:00'): 181.42,
pd.Timestamp('2018-01-03 00:00:00'): 184.67,
pd.Timestamp('2018-01-04 00:00:00'): 184.33,
pd.Timestamp('2018-01-05 00:00:00'): 186.85,
pd.Timestamp('2018-01-08 00:00:00'): 188.28},
('FB', 'close'): {
pd.Timestamp('2018-01-02 00:00:00'): 181.42,
pd.Timestamp('2018-01-03 00:00:00'): 184.67,
pd.Timestamp('2018-01-04 00:00:00'): 184.33,
pd.Timestamp('2018-01-05 00:00:00'): 186.85,
pd.Timestamp('2018-01-08 00:00:00'): 188.28},
('FB', 'high'): {
pd.Timestamp('2018-01-02 00:00:00'): 181.58,
pd.Timestamp('2018-01-03 00:00:00'): 184.78,
pd.Timestamp('2018-01-04 00:00:00'): 186.21,
pd.Timestamp('2018-01-05 00:00:00'): 186.9,
pd.Timestamp('2018-01-08 00:00:00'): 188.9},
('FB', 'low'): {
pd.Timestamp('2018-01-02 00:00:00'): 177.55,
pd.Timestamp('2018-01-03 00:00:00'): 181.33,
pd.Timestamp('2018-01-04 00:00:00'): 184.1,
pd.Timestamp('2018-01-05 00:00:00'): 184.93,
pd.Timestamp('2018-01-08 00:00:00'): 186.33},
('FB', 'open'): {
pd.Timestamp('2018-01-02 00:00:00'): 177.68,
pd.Timestamp('2018-01-03 00:00:00'): 181.88,
pd.Timestamp('2018-01-04 00:00:00'): 184.9,
pd.Timestamp('2018-01-05 00:00:00'): 185.59,
pd.Timestamp('2018-01-08 00:00:00'): 187.2},
('FB', 'volume'): {
pd.Timestamp('2018-01-02 00:00:00'): 18151900,
pd.Timestamp('2018-01-03 00:00:00'): 16886600,
pd.Timestamp('2018-01-04 00:00:00'): 13880900,
pd.Timestamp('2018-01-05 00:00:00'): 13574500,
pd.Timestamp('2018-01-08 00:00:00'): 17994700}})

最佳答案

您可以通过索引直接访问多索引中的列。由于您尚未发布数据框代码,因此您可以使用这些代码片段来尝试它们是否有效:

  1. df[('AAPL', 'close')] 将为您提供 'AAPL' 的 'close' 列。您可以按日期对此列进行排序以提取最后的日期。

    df.sort_values('Date', ascending=False).head(1)[('AAPL', 'close')]
  2. 要比较和提取所有“AAPL”数据,您可以执行以下操作:

    df[df[('AAPL', 'close')] > df[('AAPL', 'open')]]['AAPL']

    在过滤条件中添加日期。

  3. 可能有更优化的方法,但这可能仍然有效:

    for col in df.columns.levels[0]:
    df[(col, 'range')] = df[(col, 'high')] - df[(col, 'low')]

您可以添加日期条件,就像我们在普通数据框中所做的那样。

关于python - 如何从多索引数据框中提取特定数据(雅虎股票数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52470344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com