【问题标题】:Change a multiindex Pandas更改多索引 Pandas
【发布时间】:2021-09-18 06:16:30
【问题描述】:

我想将我的索引从图像 1 中的显示方式更改为图像 2。

这是获取图片 1 的代码:

stocks = pd.DataFrame()

Tickers = ['AAPL', 'TSLA', 'IBM', 'MSFT']

for tick in Tickers:
    df = web.DataReader(tick, "av-daily", start=datetime(2015, 1, 1),end=datetime.today(),api_key='') 
    df['Stock'] = tick
    
    stocks = stocks.append(df)

stocks.index = pd.to_datetime(stocks.index)
stocks = stocks.set_index('Stock', append = True)

vol = stocks[[‘volume’]]

weekly = vol.groupby([pd.Grouper(level=0, freq='W', label = 'left'), pd.Grouper(level='Stock')]).sum()
weekly.index.rename(['Date', 'Stock'], inplace = True)
weekly.unstack()

图片 1

图片 2

【问题讨论】:

  • 无法按原样运行您的代码。缺少导入且未定义 vol
  • 抱歉,希望现在已修复。 vol 只是股票数据框的卷列。

标签: python pandas multi-index


【解决方案1】:

获得股票数据帧后,执行以下操作:

weekly = stocks["volume"].unstack().resample("W").sum()
weekly.index = pd.MultiIndex.from_tuples([(dt.year, dt.week) for dt in weekly.index])

>>> weekly
           volume                                
Stock         AAPL       IBM       MSFT       TSLA
2015 1    53204626   5525341   27913852    4764443
     2   282868187  24440360  158596624   22622034
     3   304226647  23272056  157088136   30799137
     4   198737041  31230797  137352632   16215501
     5   465842684  32927307  437786778   15720217
           ...       ...        ...        ...
2021 23  327048055  22042806  107035149  105306562
     24  456667151  23177438  128993727  107296122
     25  354155878  17129373  117966870  153549954
     26  321360130  29077036  104384023  103666230
     27  213093382  12153414   54825591   42076410

【讨论】:

    【解决方案2】:
     weekly.droplevel(level=0,axis=1)
    

    【讨论】:

    • 如何将日期索引分解为年份和周数?
    猜你喜欢
    • 2019-06-04
    • 2022-01-10
    • 2021-11-13
    • 2015-01-16
    • 2021-06-09
    • 1970-01-01
    • 2019-10-15
    • 2020-04-21
    • 2019-12-06
    相关资源
    最近更新 更多