2017-07-21 5 views
1

Da die Daten des Formulars basiert:Daten in Datenrahmen anordnen zu Terminen

ID Date  Highlight 
1 201501 B 
2 201506 C 
1 201507 A 
3 201508 D 
2 201509 A 
3 201510 B 
3 201501 B 

Erforderliche Leistung (in einem Datenrahmen) - gegen jede ID muss ich eine Sequenz in der Reihenfolge der Zeit des Auftretens:

Im Wesentlichen beabsichtige ich, eine Eingabe mit variabler Länge zu trainieren - RNN, um das nächste Zeichen in der Sequenz für jede der IDs vorherzusagen.

Antwort

2

Ich glaube, Sie brauchen to_datetime und sort_values zuerst:

df['Date'] = pd.to_datetime(df['Date'], format='%Y%m') 
df = df.sort_values(['ID','Date']) 
print (df) 
    ID  Date Highlight 
0 1 2015-01-01   B 
2 1 2015-07-01   A 
1 2 2015-06-01   C 
4 2 2015-09-01   A 
6 3 2015-01-01   B 
3 3 2015-08-01   D 
5 3 2015-10-01   B 

Und dann groupby mit dem Parameter sort, da Standard-Sortierung nicht notwendig mit apply ist:

... list für Listenspalte

df1 = df.groupby('ID', sort=False)['Highlight'] \ 
     .apply(list) \ 
     .reset_index(name='Highlight Sequence') \ 


print (df1) 
    ID Highlight Sequence 
0 1    [B, A] 
2 2    [C, A] 
1 3   [B, D, B] 

... join für string s Säule:

df2 = df.groupby('ID', sort=False)['Highlight'] 
     .apply(','.join) 
     .reset_index(name='Highlight Sequence') 

print (df2) 

    ID Highlight Sequence 
0 1    B,A 
1 2    C,A 
2 3    B,D,B 

Aber wenn Bedarf, um durch die Position der Zeilen (date Spalte standardmäßig sortiert wird oder nicht wichtig ist):

df2 = df.groupby('ID', sort=False)['Highlight'] \ 
     .apply(list) \ 
     .reset_index(name='Highlight Sequence') 

print (df2) 
    ID Highlight Sequence 
0 1    [B, A] 
1 2    [C, A] 
2 3   [D, B, B] 
Verwandte Themen