在数据帧中成对排列条目序列

时间:2017-07-21 18:36:56

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

给出一个表格表格:

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或任何自定义长度。我应该怎么做呢?

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