Pandas: วิธีนำคอลัมน์บางคอลัมน์จากดาต้าเฟรมแบบหลายดัชนี

ฉันมี Pandas DataFrame แบบเปิด สูง ต่ำ ปิด ปริมาณสำหรับหุ้นหลายตัว

ฉันต้องการใช้เฉพาะคอลัมน์ปิดสำหรับ Stock Tickers แต่ละตัวและสร้าง DataFrame ที่สองแยกต่างหากสำหรับสิ่งนั้น - กำลังดิ้นรนกับไวยากรณ์และความเข้าใจในการทำดัชนีหลายรายการ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก! ฉันต้องการให้ Data DataFrame ไม่ถูกแตะต้องเพื่อพูดแผนภูมิ CandleStick

import ...
tickers = ['AAPL', 'MSFT', 'INTC', 'AMZN', 'GS', '^GSPC', 'SPY', '^VIX']
data = yf.download(tickers=tickers, start='2010-01-01', end='2020-01-01',
               interval='1d',
               group_by='ticker',
               auto_adjust=True,  # auto adjusts OHLC
               prepost=True,  # download pre/post market hours data
               threads=True,  # use threads for mass downloading?
               proxy=None
               )

ขอบคุณมาก,

ในบันทึกย่ออื่น ดังที่คุณเห็นในเอาต์พุตของ Excel ดัชนีวันที่มีการประทับเวลา "00:00:00" - ต่อไปเพื่อลบสิ่งนั้นภายใน DataFrame และ/หรือสำหรับเอาต์พุต Excel - ไม่ต้องเสียเวลาไปกังวลมากนัก เพียงแค่คิดเท่านั้น

การแสดง Excel ของ 15 แถวแรกและหุ้นบางส่วน


person GXZ9    schedule 18.04.2020    source แหล่งที่มา


คำตอบ (2)


ใช้ เมธอด xs ขั้นสูงเพื่อเลือก ระดับที่ลึกกว่าของ MultiIndex

data.xs('Close', level=1, axis=1)
#                    AMZN       ^VIX         SPY        ^GSPC        MSFT          GS       INTC        AAPL
# Date                                                                                                      
# 2010-01-04   133.899994  20.040001   92.246048  1132.989990   24.294369  149.746597  15.251445   26.538483
# 2010-01-05   134.690002  19.350000   92.490204  1136.520020   24.302216  152.394012  15.244140   26.584366
# 2010-01-06   132.250000  19.160000   92.555328  1137.140015   24.153070  150.767426  15.193007   26.161509
# 2010-01-07   130.000000  19.059999   92.946060  1141.689941   23.901886  153.717728  15.046927   26.113146
# 2010-01-08   133.520004  18.129999   93.255348  1144.979980   24.066734  150.810715  15.214921   26.286753
# ...                 ...        ...         ...          ...         ...         ...        ...         ...
# 2019-12-24  1789.209961  12.670000  319.352142  3223.379883  156.951309  228.512817  59.118862  283.596924
# 2019-12-26  1868.770020  12.650000  321.052124  3239.909912  158.237793  229.804916  59.526852  289.223602
# 2019-12-27  1869.800049  13.430000  320.972565  3240.020020  158.527008  229.258255  59.785580  289.113831
# 2019-12-30  1846.890015  14.820000  319.202972  3221.290039  157.160736  228.403488  59.327831  290.829773
# 2019-12-31  1847.839966  13.780000  319.978424  3230.780029  157.270432  228.532684  59.556702  292.954712
person mcskinner    schedule 18.04.2020

คุณสามารถนำเข้าข้อมูลราคาหุ้นได้โดยไม่ต้องใช้รูปแบบหลายดัชนีเช่นนี้

from math import sqrt
from sklearn.cluster import MiniBatchKMeans 
import pandas_datareader as dr
from matplotlib import pyplot as plt
import pandas as pd
import matplotlib.cm as cm
import seaborn as sn

start = '2019-1-1'
end = '2020-1-1'

tickers = ['AXP','AAPL','BA','CAT','CSCO','CVX','XOM','GS','HD','IBM','INTC','JNJ','KO','JPM','MCD',    'MMM',  'MRK',  'MSFT', 'NKE','PFE','PG','TRV','UNH','RTX','VZ','V','WBA','WMT','DIS','DOW']
prices_list = []
for ticker in tickers:
    try:
        prices = dr.DataReader(ticker,'yahoo',start)['Adj Close']
        prices = pd.DataFrame(prices)
        prices.columns = [ticker]
        prices_list.append(prices)
    except:
        pass
    prices_df = pd.concat(prices_list,axis=1)
prices_df.sort_index(inplace=True)
prices_df.head()

ผลลัพธ์:

                  AXP       AAPL          BA         CAT       CSCO  \
Date                                                                  
2019-01-02  92.042946  38.505024  314.645142  118.671188  39.772106   
2019-01-03  90.246315  34.669640  302.100555  114.098251  38.325676   
2019-01-04  94.312866  36.149662  317.822601  120.333229  40.052055   
2019-01-07  94.824791  36.069202  318.823395  120.408340  40.322678   
2019-01-08  95.288445  36.756794  330.891937  121.854416  40.649292   

                   CVX        XOM          GS          HD         IBM  \
Date                                                                    
2019-01-02   99.261368  60.557911  163.946991  162.949036  103.081429   
2019-01-03   97.360268  59.628124  161.545410  159.357559  101.023560   
2019-01-04   99.377945  61.826595  166.825119  164.092636  104.969307   
2019-01-07  100.669258  62.148109  167.749557  167.324936  105.711922   
2019-01-08  100.229866  62.599968  167.130081  168.128311  107.215065   

ดูลิงค์ด้านล่างสำหรับข้อมูลเพิ่มเติม

https://github.com/ASH-WICUS/Notebooks/blob/master/Clustering%20-%20Historical%20Stock%20Prices.ipynb

person ASH    schedule 07.04.2021