Pandas: Cara mengambil kolom tertentu dari kerangka data multi-indeks

Saya memiliki Pandas DataFrame Open, High, Low, Close, Volume untuk beberapa saham.

Saya hanya ingin mengambil Kolom Tutup untuk masing-masing Ticker Saham dan membuat DataFrame terpisah kedua untuk itu - berjuang dengan sintaks dan pemahaman Multi-Pengindeksan; bantuan apa pun akan sangat dihargai! Saya ingin Data DataFrame tidak tersentuh, misalnya, grafik 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
               )

Terimakasih banyak,

Pada catatan terpisah, seperti yang Anda lihat di keluaran Excel, indeks tanggal berisi stempel waktu "00:00:00" - tetap saja untuk menghapusnya dalam DataFrame dan/atau untuk keluaran Excel? - Tidak perlu menghabiskan terlalu banyak waktu untuk mengkhawatirkannya, cukup memikirkan saja.

Representasi Excel dari 15 baris pertama dan beberapa saham


person GXZ9    schedule 18.04.2020    source sumber


Jawaban (2)


Gunakan metode xs lanjutan untuk memilih dari tingkat yang lebih dalam dari 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

Anda tentu bisa mengimpor data harga saham tanpa menggunakan konvensi multi-indeks, seperti ini.

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

Hasil:

                  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   

Lihat tautan di bawah untuk info lebih lanjut.

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

person ASH    schedule 07.04.2021