2017-07-18 23 views
1

Umformung Ich habe folgende Datenrahmen:einen Datenrahmen mit nicht-eindeutigen Index

In [299]: df 
Out[299]: 
         a b 
DATE 
2017-05-28 15:01:37 0.0 1.0 
2017-05-28 15:01:39 1.0 0.0 
2017-05-28 15:01:39 1.0 0.0 
2017-05-28 15:01:39 1.0 0.0 
2017-05-28 15:01:39 1.0 0.0 
2017-05-28 15:01:39 1.0 0.0 
2017-05-28 15:01:42 1.0 0.0 
2017-05-28 15:02:10 1.0 0.0 
2017-05-28 15:02:14 0.0 1.0 
2017-05-28 15:02:23 0.0 1.0 
2017-05-28 15:02:28 1.0 0.0 
2017-05-28 15:02:34 0.0 1.0 
2017-05-28 15:02:34 0.0 1.0 

ich kann die Form bekommen, die ich suche nach wie folgt vorgehen:

In [300]: xa = df.groupby(df.index).apply(lambda x: x['a'].values) 

In [301]: xb = df.groupby(df.index).apply(lambda x: x['b'].values) 

In [302]: ya = pd.DataFrame(xa.tolist(), index=xa.index) 

In [303]: yb = pd.DataFrame(xb.tolist(), index=xb.index) 

In [304]: new_df = pd.concat([ya, yb], axis=1, keys=['a', 'b']) 

In [305]: new_df 
Out[305]: 
         a      b 
         0 1 2 3 4 0 1 2 3 4 
DATE 
2017-05-28 15:01:37 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:01:39 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 
2017-05-28 15:01:42 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:10 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:14 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:02:23 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:02:28 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:34 0.0 0.0 NaN NaN NaN 1.0 1.0 NaN NaN NaN 

Gibt es eine effizienter Weg zum selben Ergebnis?

Antwort

2

einen Indexstand anhängen mit cumcount

df.set_index(df.groupby(level='DATE').cumcount(), append=True).unstack() 

         a      b      
         0 1 2 3 4 0 1 2 3 4 
DATE                 
2017-05-28 15:01:37 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:01:39 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 
2017-05-28 15:01:42 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:10 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:14 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:02:23 0.0 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN 
2017-05-28 15:02:28 1.0 NaN NaN NaN NaN 0.0 NaN NaN NaN NaN 
2017-05-28 15:02:34 0.0 0.0 NaN NaN NaN 1.0 1.0 NaN NaN NaN 
Verwandte Themen