2016-09-29 7 views
2

Ich habe zur Zeit ein Pandas Datenrahmen wie folgt aussehen:erstellen oder Datenrahmen ändern andere Datenrahmen mit

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 

Das Problem ist, dass verschiedene Elemente (angegeben mit einzigartigen Spalte name) unterschiedliche Zeit der Entstehung haben sowie am Leben zu sein für unterschiedliche Menge an Zeit

  • Above Artikel a beginnt bei 2016-01-02 und endet bei 2016-01-06
  • Above Artikel b beginnt um 2006-01-04 und endet um 2006-01-07.

Ich möchte die Spalte pct_chg in einem neuen Datenrahmen zusammenzufassen, wie von nameDATESTAMP als Index und Spalten. Ich möchte auch, dass der neue DataFrame den Index so aufweist, dass er mit dem "ältesten" vorhandenen Datensatz (in diesem Fall 2006-01-02) beginnt und mit dem "neuesten" (in diesem Fall 2006-01-07) endet.

Das Ergebnis würde so aussehen

  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 

Antwort

2

Sie set_index mit unstack verwenden können:

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 

Eine andere Lösung mit 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 
Verwandte Themen