2016-11-03 2 views
4

Ich habe folgende DatenrahmenUmgestalten Pandas Dataframe

  A 
0 2012-01-13 10:00:06 
1 2012-01-13 11:09:04 
2 2012-01-13 12:07:05 
3 2012-01-13 13:03:04 
4 2012-01-16 10:00:10 
5 2012-01-16 11:09:04 
6 2012-01-16 12:01:05 
7 2012-01-16 13:09:04 
8 2012-01-17 10:01:04 
9 2012-01-17 11:05:06 
10 2012-01-17 12:01:05 
11 2012-01-17 13:04:04 

wobei der Index 0,1 ist, .. etc

Gibt es eine Möglichkeit, Daten auf den Tag transponieren basiert? suchen zum Beispiel sollten die neuen Datenrahmen wie:

  A      B     C     D 
0 2012-01-13 10:00 2012-01-13 11:09 2012-01-13 12:07 2012-01-13 13:03 
1 2012-01-16 10:00 2012-01-16 11:09 2012-01-16 12:01 2012-01-16 13:09 
2 2012-01-17 10:01 2012-01-17 11:05 2012-01-17 12:01 2012-01-17 13:04 

Antwort

5

Ich glaube, Sie Spalte Tage nach dt.day erstellen müssen, dann erstellen Sie Gruppen von cumcount, verwenden pivot mit reset_index. Zuletzt zuweisen neue Spaltennamen:

#if dtype of column is not datetime 
df.A = pd.to_datetime(df.A) 

df['day'] = df.A.dt.day 
df['groups'] = df.groupby('day').cumcount() 

df = df.pivot(index='day', columns='groups', values='A').reset_index(drop=True) 
df.columns = list('ABCD') 
print (df) 
        A     B     C \ 
0 2012-01-13 10:00:06 2012-01-13 11:09:04 2012-01-13 12:07:05 
1 2012-01-16 10:00:10 2012-01-16 11:09:04 2012-01-16 12:01:05 
2 2012-01-17 10:01:04 2012-01-17 11:05:06 2012-01-17 12:01:05 

        D 
0 2012-01-13 13:03:04 
1 2012-01-16 13:09:04 
2 2012-01-17 13:04:04 
+0

danke dies ist eine großartige Idee, aber ein Problem, wenn die DF größer ist und ich habe mehr als 1 Monat. Zum Beispiel, wenn es einen anderen Tag 13 (zum Beispiel 13 von Feb) gibt, geht "Gruppen" 4,5,6,7. Gibt es eine Möglichkeit, basierend auf Tag-Monat zu gruppieren? – Gabriel

+1

Ich denke, du kannst 'df ['day'] = df.A.dt.strftime ('% d-% m')' verwenden. – jezrael

+0

erstaunlich. Vielen Dank. den Kommentar auch aufheben. – Gabriel