如何并排串联数据框的多个移动行



我正在研究数据预处理,我想以与n-gram相似的方式在数据框架中安排样本。例如,如果我的样本为:

1,2,3,4    1
0,4,2,1    1
0,2,3,5    1
1,5,5,5    0
6,5,2,1    0

我希望新的数据框看起来像这样:

1,2,3,4,0,4,2,1,0,2,3,5    1
0,4,2,1,0,2,3,5,1,5,5,5    0
0,2,3,5,1,5,5,5,6,5,2,1    0

目标变量基本上是最后一个附加样本的目标值(即第三个)。

我正在使用Scikit-Learn在Python 3中使用Pandas DataFrame进行机器学习。

如何迭代数据帧样本并并排连接它们?我尝试了 concat,但是每行变成类型 Series,因此不连接。

以获取进一步的参考,我早些时候在这里提出了一个问题。

任何建议都将不胜感激。

本质上,您正在尝试连续移动数据框架的版本。您可以做到这一点是列表理解:

 window_size=3
 pd.concat([df.iloc[:,0:4].shift(-i) for i in range(window_size)] 
           + [df.iloc[:,4].shift(1 - window_size)], axis=1).iloc[0:1 - window_size]
       a  b  c  d      a    b    c    d      a    b    c    d    y
0      1  2  3  4    0.0  4.0  2.0  1.0    0.0  2.0  3.0  5.0  1.0
1      0  4  2  1    0.0  2.0  3.0  5.0    1.0  5.0  5.0  5.0  0.0
2      0  2  3  5    1.0  5.0  5.0  5.0    6.0  5.0  2.0  1.0  0.0

这更多是一个numpy问题

用于生成数据的代码

data =np.array([[1,2,3,4],
[0,4,2,1  ],
[0,2,3,5  ],
[1,5,5,5  ],
[6,5,2,1  ]])
labels = np.array([[1,1,1,0,0]]).transpose()

'重塑'数据

row_ids = [range(k,k+3) for k in range(x.shape[0]-2)]
new_data = np.reshape(data[row_ids, :], [data.shape[0]-2, 12])
new_labels = labels[2:]

结果:

print new_data
print new_labels
[[1 2 3 4 0 4 2 1 0 2 3 5]
 [0 4 2 1 0 2 3 5 1 5 5 5]
 [0 2 3 5 1 5 5 5 6 5 2 1]]
[[1]
 [0]
 [0]]

最后,制作熊猫DF:

df = pd.DataFrame(new_data)
df['new_labels'] = new_labels

作为旁注:要获得更好的理解,请参阅我们如何用row_ids

对数据进行采样
print row_ids
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

相关内容

  • 没有找到相关文章

最新更新