[英]How to concatenate multiple shifted rows of a dataframe side by side?
我正在进行数据预处理,我想在数据框中以与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
目标变量基本上是最后附加样本的目标值(即第三个)。
我在python 3中使用pandas数据框,并使用scikit-learn进行机器学习。
如何迭代数据框样本并将它们并排连接? 我尝试了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
这更像是一个愚蠢的问题
生成数据的代码
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_id对数据进行采样
print row_ids
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.