Python 将数据帧列转换为特征和目标矩阵的更快方法

Python 将数据帧列转换为特征和目标矩阵的更快方法,python,pandas,Python,Pandas,我在数据帧(df)中有一列(二进制),其形式如下: Vector 0 1 0 1 0 . . . 我在一个二元分类模型中使用它。我的目标是将这些0和1移动到两个单独的列表中,然后将它们转换为numpy数组。例如,我想将前5项从Vector移到X,然后将第6项移到Y。然后将下5项移到X,然后将下6项移到Y,直到df结束(目前为200k行) 我的第一反应是为此编写for循环(但我知道这是非常低效的): 用于范围内的i(0,df.形状[0]-6): #当我们遍历df时 #我们将使用步骤5 如果i_c

我在数据帧(df)中有一列(二进制),其形式如下:

Vector
0
1
0
1
0
.
.
.
我在一个二元分类模型中使用它。我的目标是将这些0和1移动到两个单独的列表中,然后将它们转换为numpy数组。例如,我想将前5项从Vector移到X,然后将第6项移到Y。然后将下5项移到X,然后将下6项移到Y,直到df结束(目前为200k行)

我的第一反应是为此编写for循环(但我知道这是非常低效的):

用于范围内的i(0,df.形状[0]-6):
#当我们遍历df时
#我们将使用步骤5
如果i_cnt>5:
y=df['Vector'].iloc[i]
Y.append(Y)
i_cnt=1
其他:
x=df['Vector'].iloc[i]
X.append(X)
i_cnt+=1

确实有一种更快的方法可以做到这一点,希望有人知道我如何做到这一点?

通过索引长度创建的数组使用模和
6
,并比较
X
Y

#sample data for easy verify

df = pd.DataFrame({'Vector': range(20)})

idx = np.arange(len(df)) % 6


通过索引长度创建的数组对
6
使用模,并比较
X
Y

#sample data for easy verify

df = pd.DataFrame({'Vector': range(20)})

idx = np.arange(len(df)) % 6


对于
k=5+1=6

k = 6

n_rows = len(df.index)
n_samples = n_rows // k

X_and_y = df.Vector.to_numpy().reshape(n_samples, k)

X = X_and_y[:, :-1]
y = X_and_y[:, -1]
我们将列重塑为
(n_samples,5+1)
数组,其中
n_samples=n_rows/6
,然后将除最后一列之外的所有列都放入
X
,最后一列放入
y

e、 g


对于
k=5+1=6

k = 6

n_rows = len(df.index)
n_samples = n_rows // k

X_and_y = df.Vector.to_numpy().reshape(n_samples, k)

X = X_and_y[:, :-1]
y = X_and_y[:, -1]
我们将列重塑为
(n_samples,5+1)
数组,其中
n_samples=n_rows/6
,然后将除最后一列之外的所有列都放入
X
,最后一列放入
y

e、 g

你可以试试

X = list(df[df.index % 6 < 5]["Vector"])
y = list(df[df.index % 6 == 5]["Vector"])
X=list(df[df.index%6<5][“Vector”])
y=列表(df[df.index%6==5][“Vector”])
您可以试试

X = list(df[df.index % 6 < 5]["Vector"])
y = list(df[df.index % 6 == 5]["Vector"])
X=list(df[df.index%6<5][“Vector”])
y=列表(df[df.index%6==5][“Vector”])

我得到以下错误:
TypeError:无法使用此索引类型执行uuu mod_uuuu:index
您可以共享
df.index
的输出吗?请尝试
x=list(df[df.reset\u index().index%6<5][Vector”])
y=list(df[df.reset\u index().index%6==5][Vector”])
我得到以下错误:
TypeError:无法使用此索引类型执行uuu mod_uuuu:index
您可以共享
df.index
的输出吗?请尝试
x=list(df[df.reset\u index().index%6<5][Vector”])
y=list(df[df.reset\u index().index%6==5][Vector”])
在线
idx=df.index%6
我得到以下错误:
TypeError:无法使用此索引类型执行修改:index
@Dean-然后需要
idx=np.arange(len(df))%6
在线
idx=df.index%6
我得到以下错误:
TypeError:无法使用此索引类型执行修改:index
@Dean-然后需要
idx=np.arange(len(df))%6