我目前有一个像这样的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
问题是不同的项目(使用唯一列name
指定)具有不同的起始时间以及在不同的时间内活着
a
从2016-01-02
开始,到2016-01-06
b
从2006-01-04
开始,到2006-01-07
结束。我想在新的DataFrame中汇总列pct_chg
,其中DATESTAMP
为索引,列为name
。我还希望新的DataFrame以这样一种方式获得索引:它以“最早的”现有日期记录(在本例中为2006-01-02
)开始,并以“最新”结尾(在本例中为{{ 1}})。
结果看起来像
2006-01-07
答案 0 :(得分:2)
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