重新格式化 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
如果你需要聚合,比如说它们是某个date/ticket组合的多个价格,你可以聚合
df.pivot_table(index='Date',columns='Ticker',values='Prc',aggfunc='max')
我每月从 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
如果你需要聚合,比如说它们是某个date/ticket组合的多个价格,你可以聚合
df.pivot_table(index='Date',columns='Ticker',values='Prc',aggfunc='max')