给出一个表格表格:
ID Sequence
1 A,C,D,E,F,G
2 D,F,G,B
3 A,B,A,C
and so on
现在我希望安排这些数据,以便可以按顺序方式将其输入RNN,以便我能够预测每个序列中的下一个条目。所以这是所有可能序列形式所需的(在新的数据帧中):
X Y
A,C,D E
C,D,E F
D,E,F G
D,F,G B
A,B,A C
X的长度可以是3或任何自定义长度。我应该怎么做呢?
答案 0 :(得分:1)
以下是使用df.split
并将pd.Series
应用于子列表的另一种方式:
In [623]: df.Sequence.str.split(',')\
...: .apply(lambda x: pd.Series([x[i : i + 3], x[i + 3]] for i in range(0, len(x)- 3))).stack()\
...: .apply(lambda x: pd.Series([x[0], x[1]]))\
...: .reset_index(drop=True)
Out[623]:
0 1
0 [A, C, D] E
1 [C, D, E] F
2 [D, E, F] G
3 [D, F, G] B
4 [A, B, A] C
设置列就像df.columns = ['X', 'Y']
一样简单。
答案 1 :(得分:0)
这是(很多)这样做的其中一种方式。
In [52]: vals = df.Sequence.str.split(',')
In [53]: seqs = []
In [54]: for val in vals:
...: seqs += [{'X': val[i:i+3], 'Y': val[i+3]} for i in xrange(len(val)-3)]
...:
In [55]: pd.DataFrame(seqs)
Out[55]:
X Y
0 [A, C, D] E
1 [C, D, E] F
2 [D, E, F] G
3 [D, F, G] B
4 [A, B, A] C
答案 2 :(得分:0)
这将完成这项工作:
vals=[l.split(',') for l in df.sequences.values]
X,Y=zip(*sum([[[','.join(el[i:i+3]),el[i+3]] for i in range(len(el)-3)] for el in vals],[]))
res=pd.DataFrame({'X':X,'Y':Y})
然后res
是
X Y
0 A,C,D E
1 C,D,E F
2 D,E,F G
3 D,F,G B
4 A,B,A C