根据日期在Dataframe中排列数据

时间:2017-07-21 08:27:41

标签: python python-3.x pandas numpy dataframe

给出表格的数据:

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的下一个字符。

1 个答案:

答案 0 :(得分: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

然后使用参数sort groupby,因为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列,

... 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]