繁体   English   中英

如何并排连接数据帧的多个移位行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM