2017-07-21 70 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]