我目前有一个 Pandas DataFrame,如下所示:
DATESTAMP price name pct_chg
0 2006-01-02 62.987301 a 0.000000
1 2006-01-03 61.990700 a -0.015822
2 2006-01-04 62.987301 a 0.016077
3 2006-01-05 62.987301 a 0.000000
4 2006-01-06 61.990700 a -0.015822
6 2006-01-04 100.1 b 0.000000
7 2006-01-05 100.5 b -0.015822
8 2006-01-06 100.7 b 0.016077
9 2006-01-07 100.8 b 0.016090
问题是不同的项目(用唯一的列名称
指定)具有不同的起始时间以及不同的事件时间
- 以上项目
a
开始于2016-01-02
并结束于2016-01-06
- 以上项目
b
开始于2006-01-04
并结束于2006-01-07
。
我想在新的 DataFrame 中总结列 pct_chg
,以 DATESTAMP
作为索引,以 name
为列。我还希望新的 DataFrame 具有索引,使其以“最旧的”现有日期记录(在本例中为 2006-01-02
)开始,并以“最新”结束“(在本例中为 2006-01-07
)。
结果看起来像
a b
2006-01-02 0.000000 NaN
2006-01-03 -0.015822 NaN
2006-01-04 0.016077 0.000000
2006-01-05 0.000000 -0.015822
2006-01-06 -0.015822 0.016077
2006-01-07 NaN 0.016090
最佳答案
print (df.set_index(['DATESTAMP','name'])['pct_chg'].unstack())
name a b
DATESTAMP
2006-01-02 0.000000 NaN
2006-01-03 -0.015822 NaN
2006-01-04 0.016077 0.000000
2006-01-05 0.000000 -0.015822
2006-01-06 -0.015822 0.016077
2006-01-07 NaN 0.016090
另一个解决方案 pivot
:
print (df.pivot(index='DATESTAMP', columns='name', values='pct_chg'))
name a b
DATESTAMP
2006-01-02 0.000000 NaN
2006-01-03 -0.015822 NaN
2006-01-04 0.016077 0.000000
2006-01-05 0.000000 -0.015822
2006-01-06 -0.015822 0.016077
2006-01-07 NaN 0.016090
关于python - 使用另一个 DataFrame 创建或修改 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777018/