使用其他DataFrame创建或修改DataFrame

时间:2016-09-29 17:57:50

标签: python pandas dataframe pivot reshape

我目前有一个像这样的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指定)具有不同的起始时间以及在不同的时间内活着

  • 上面的项目a2016-01-02开始,到2016-01-06
  • 结束
  • 上面的项b2006-01-04开始,到2006-01-07结束。

我想在新的DataFrame中汇总列pct_chg,其中DATESTAMP为索引,列为name。我还希望新的DataFrame以这样一种方式获得索引:它以“最早的”现有日期记录(在本例中为2006-01-02)开始,并以“最新”结尾(在本例中为{{ 1}})。

结果看起来像

2006-01-07

1 个答案:

答案 0 :(得分:2)

您可以set_index使用unstack

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