我想将一个数据帧转换为具有相同信息但略微重组的数据帧。就目前而言,我有一个矩阵,我们称其为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: [] []
.
.
.
.
答案 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]