使用旧的元素组作为头的旧数据框

时间:2019-07-15 14:17:33

标签: python pandas dataframe dictionary

我想将一个数据帧转换为具有相同信息但略微重组的数据帧。就目前而言,我有一个矩阵,我们称其为A,它看起来像这样:A = [companies,day,close],标题与A中的名称相对应(其中实际元素分别是名称,日期和价格)。我想要一个矩阵B,这样索引是日期,列是价格,每列对应一个公司。

我尝试了groupby,pivot_table并仔细研究了与我的问题无济于事的旧答案。要导入数据,我只需使用

data = pd.read_excel('finbas.xlsx', index_col=1,
                     usecols = ["name", "day", "lastad"])

哪个给类似的东西

day           name         price
1997-01-03    Acompany     97.5423
1997-01-04    Acompany     98.4234
.
.
2019-07-12   Acompany      104.2158
1997-01-03   Bcompany       21.4531
1997-01-04   Bcompany       22.2331
.
.
2019-07-12   Bcompany       24.9873

现在,我希望标题是公司名称(仅一次-即Acompany是标题,其在下面的列中的每个收盘价),日期是指数,价格是要素,即:

            Acompany    Bcompany...
1997-01-03: []          []
1997-01-04: []          []
.            
.
.
.

1 个答案:

答案 0 :(得分:0)

这是一种实现方法:

          day      name     price
0  1997-01-03  Acompany   97.5423
1  1997-01-04  Acompany   98.4234
2  2019-07-12  Acompany  104.2158
3  1997-01-03  Bcompany   21.4531
4  1997-01-03  Bcompany   22.4531
5  1997-01-04  Bcompany   22.2331
6  2019-07-12  Bcompany   24.9873

df = df.groupby(['day', 'name'])['price'].apply(list)
df = df.reset_index()
df.index = df.day
df.drop(columns=['day'], inplace = True)
df = df.pivot(columns='name')

输出:

                 price                    
name          Acompany            Bcompany
day                                       
1997-01-03   [97.5423]  [21.4531, 22.4531]
1997-01-04   [98.4234]           [22.2331]
2019-07-12  [104.2158]           [24.9873]