数据帧切片并旋转成多个数据帧

dataframe slicing and pivoting then into multiple dataframes

最终我想运行下面股票数据的参数变量

我有以下形式的数据:

     Date       Symbol     ClosingPrice    Weight
0   7/22/2016      A         46.58         0.000002
1   7/25/2016      A         46.14         0.000002
2   7/26/2016      A         46.95         0.000002
3   7/27/2016      A         47.26         0.000002
4   7/28/2016      A         47.51         0.000002
5   7/22/2016     AA         10.57         0.000287
6   7/25/2016     AA         10.49         0.000287
7   7/26/2016     AA         10.67         0.000287
8   7/27/2016     AA         10.74         0.000287
9   7/28/2016     AA         10.68         0.000287
10  7/22/2016   AAAP         30.51         0.000003
11  7/25/2016   AAAP         31.02         0.000003
12  7/26/2016   AAAP         30.85         0.000003
13  7/27/2016   AAAP         30.97         0.000003
14  7/28/2016   AAAP         31.00         0.000003

我想创建 2 个单独的数据框:

date         A       AA      AAAP
7/22/2016   46.58   10.57   30.51
7/25/2016   46.14   10.49   31.02
7/26/2016   46.95   10.67   30.85
7/27/2016   47.26   10.74   30.97
7/28/2016   47.51   10.68   31

以符号为列headers

Symbol    Weight
A         0.00000166
AA        0.00028664
AAAP      0.00000326

第一个数据框将用于计算 variance/covariance 矩阵,第二个数据框表示股票投资组合中每种证券的权重(参数 VAR 计算中的一个参数)

要获得第一个 table,您可以旋转原始数据框以在前三列上将其从长格式转换为宽格式:

import pandas as pd
df.iloc[:,0:3].pivot('Date', 'Symbol', 'ClosingPrice')

#   Symbol      A      AA    AAAP
#     Date          
#7/22/2016  46.58   10.57   30.51
#7/25/2016  46.14   10.49   31.02
#7/26/2016  46.95   10.67   30.85
#7/27/2016  47.26   10.74   30.97
#7/28/2016  47.51   10.68   31.00

第二个table是第二列和第四列的唯一值,所以select和drop_duplicates应该没问题:

df.iloc[:,[1,3]].drop_duplicates()

#      Symbol     Weight
#0          A   0.000002
#5         AA   0.000287
#10      AAAP   0.000003