重新格式化 python 中的大型数据集

Reformating a large dataset in python

我每月从 WRDS CRSP 数据库中获取一个很大的 df,我需要 reshape/reformat 才能使用它。

df 看起来像这样:

PERMNO Date Ticker Prc
1000 19851231 ABC -4.32
1000 19850101 ABC -2.12
1000 19851231 DEF -1.32
1000 19850101 DEF -6.72
1000 19850102 DEF +0.32

我需要唯一的 Tickers 作为 header 和唯一的日期(日期格式)作为与 PRC 匹配的代码和日期的索引。我试图将代码和日期转换为列表并用它创建一个新的 df,但我无法将 Prc 与代码和日期相匹配。它必须看起来像这样:

Date ABC DEF
1985/12/31 -4.32 -1.32
1985/01/01 -2.12 -6.72
1985/01/02 .... +0.32
1985/01/03 .... ....
1985/01/04 .... ....

我尝试以我可以使用的方式重塑它 pd.merge,但我尝试的任何方法都不起作用。 有谁知道如何正确合并它或者更好的主意吗?

你需要pandaspivot

df.pivot(index='Date',columns='Ticker',values='Prc')

使用如下创建的示例数据

df = pd.DataFrame([
[19850101,'abc',1.0],[19850102,'abc',1.1],[19850101,'xyz',2.0],[19850102,'xyz',1.9]
],columns=['Date','Ticker','Prc'])

初始数据帧

       date ticker  prc
0  19850101    abc  1.0
1  19850102    abc  1.1
2  19850101    xyz  2.0
3  19850102    xyz  1.9

枢轴输出

    ticker    abc  xyz
    date
    19850101  1.0  2.0
    19850102  1.1  1.9

Pandas Pivot Docs

如果你需要聚合,比如说它们是某个date/ticket组合的多个价格,你可以聚合

df.pivot_table(index='Date',columns='Ticker',values='Prc',aggfunc='max')