2017-07-21 111 views
1

在數據幀的數據給出的形式的數據:排列根據日期

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

所需的輸出(在數據幀) - 針對每個ID我需要在發生的時間順序的序列:

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

本質上,我打算訓練一個可變長度輸入--RNN來預測序列中每個ID的下一個字符。

回答

2

我想你需要to_datetimesort_values第一:

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 

然後用參數sortgroupby,因爲默認的排序是沒有必要與apply

... list的名單列

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 for string專欄:

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 

但是,如果通過(date欄預設排序或不重要)行的位置需要順序:

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]