【问题标题】:Pandas pivot_table using a given list of indices and columnsPandas pivot_table 使用给定的索引和列列表
【发布时间】:2016-02-14 02:47:06
【问题描述】:

我希望得到一些帮助,以了解如何将 pandas 数据框转换为具有给定索引和列列表的表(而不是 pandas 自动选择索引和列的默认行为)。如果这是微不足道的,请道歉。我是 python/pandas 的新手。

考虑以下数据框:

import pandas
import numpy as np
import datetime
data = {
'ticker' : np.array(['AAPL', 
               'AAPL',
               'IBM', 
               'XOM']), 
              'trade_date' : np.array([datetime.datetime(2015,01,01), 
                                    datetime.datetime(2015,04,02),
                                    datetime.datetime(2099,01,01), 
                                    datetime.datetime(2015,03,01)]), 
             'price' : np.array([10.0, 15.6, 20.9, 13.5])
  }
x = pandas.DataFrame(data)

在 pivot_table 上,

x.pivot_table(values = "price", index = "trade_date", columns = "ticker")

结果是:

ticker      AAPL   IBM   XOM
trade_date                  
2015-01-01  10.0   NaN   NaN
2015-03-01   NaN   NaN  13.5
2015-04-02  15.6   NaN   NaN
2099-01-01   NaN  20.9   NaN

但是,我想要的是:

ticker      A    AA  AAPL   IBM   XOM
trade_date                  
2015-01-01  NaN  NaN 10.0   NaN   NaN
2015-01-02  NaN  NaN NaN    NaN   NaN
2015-03-01  NaN  NaN NaN   NaN  13.5
2015-04-02  NaN  NaN 15.6   NaN   NaN
2099-01-01  NaN  NaN NaN  20.9   NaN

在 pivot_table() 中似乎没有任何规定来强制一组索引和列。

有没有快速的方法来做到这一点?数据集相当大,这将有助于快速完成。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我会在 旋转后重新索引:

    In [11]: df = x.pivot_table(values = "price", index = "trade_date", columns = "ticker")
    
    In [12]: df
    Out[12]:
    ticker      AAPL   IBM   XOM
    trade_date
    2015-01-01  10.0   NaN   NaN
    2015-03-01   NaN   NaN  13.5
    2015-04-02  15.6   NaN   NaN
    2099-01-01   NaN  20.9   NaN
    
    In [13]: df.reindex_axis(["A", "AA", "AAPL", "IBM", "XOM"], axis=1)
    Out[13]:
    ticker       A  AA  AAPL   IBM   XOM
    trade_date
    2015-01-01 NaN NaN  10.0   NaN   NaN
    2015-03-01 NaN NaN   NaN   NaN  13.5
    2015-04-02 NaN NaN  15.6   NaN   NaN
    2099-01-01 NaN NaN   NaN  20.9   NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2019-06-30
      • 2017-01-27
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多