给出表格的数据:
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的下一个字符。
答案 0 :(得分:2)
我认为您首先需要to_datetime
和sort_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]