我试图将包含15个变量的记录分成5个记录,第一个记录包含3个变量数据&其余12个变量为空值,第二个记录包含6个变量&其余9个变量为空值,第三个记录包含9个变量&其余6个变量为空值。
每个记录都有相同的类变量。

我正在试图找出一个python程序来在大约149个记录数据集上完成这个任务。
有人能帮忙吗。
谢谢你,N
发布于 2020-11-23 06:18:54
您可以使用广播来屏蔽--它意味着比较np.arange按索引长度创建的数组和用列长度除以整数除以3的三元组的数组:
np.random.seed(2020)
df = (pd.DataFrame(np.random.rand(4, 15))
.rename(columns=lambda x: f'V{x+1}')
.assign(Class = [0,1,1,0]))
print (df)
V1 V2 V3 V4 ... V13 V14 V15 Class
0 0.986277 0.873392 0.509746 0.271836 ... 0.736325 0.355663 0.341093 0
1 0.666803 0.217101 0.561427 0.124179 ... 0.456119 0.155851 0.476049 1
2 0.169702 0.896258 0.373394 0.379693 ... 0.763921 0.919691 0.070573 1
3 0.156165 0.636894 0.555696 0.191929 ... 0.936032 0.803028 0.697305 0
[4 rows x 16 columns]N = 15
new_rows = N // 3
df1 = df.iloc[:, :N]
mask = np.arange(new_rows)[:, None] >= np.arange(len(df1.columns)) // 3
repeated = np.tile(df1.to_numpy(), new_rows).reshape(new_rows * len(df.index), -1)
mask = np.tile(mask, (len(df1.index), 1))
arr = np.where(mask, repeated, np.nan)
df1 = (pd.DataFrame(arr, columns=df.columns[:N])
.assign(Class = np.repeat(df['Class'].to_numpy(), new_rows)))print (df1)
V1 V2 V3 V4 ... V13 V14 V15 Class
0 0.986277 0.873392 0.509746 NaN ... NaN NaN NaN 0
1 0.986277 0.873392 0.509746 0.271836 ... NaN NaN NaN 0
2 0.986277 0.873392 0.509746 0.271836 ... NaN NaN NaN 0
3 0.986277 0.873392 0.509746 0.271836 ... NaN NaN NaN 0
4 0.986277 0.873392 0.509746 0.271836 ... 0.736325 0.355663 0.341093 0
5 0.666803 0.217101 0.561427 NaN ... NaN NaN NaN 1
6 0.666803 0.217101 0.561427 0.124179 ... NaN NaN NaN 1
7 0.666803 0.217101 0.561427 0.124179 ... NaN NaN NaN 1
8 0.666803 0.217101 0.561427 0.124179 ... NaN NaN NaN 1
9 0.666803 0.217101 0.561427 0.124179 ... 0.456119 0.155851 0.476049 1
10 0.169702 0.896258 0.373394 NaN ... NaN NaN NaN 1
11 0.169702 0.896258 0.373394 0.379693 ... NaN NaN NaN 1
12 0.169702 0.896258 0.373394 0.379693 ... NaN NaN NaN 1
13 0.169702 0.896258 0.373394 0.379693 ... NaN NaN NaN 1
14 0.169702 0.896258 0.373394 0.379693 ... 0.763921 0.919691 0.070573 1
15 0.156165 0.636894 0.555696 NaN ... NaN NaN NaN 0
16 0.156165 0.636894 0.555696 0.191929 ... NaN NaN NaN 0
17 0.156165 0.636894 0.555696 0.191929 ... NaN NaN NaN 0
18 0.156165 0.636894 0.555696 0.191929 ... NaN NaN NaN 0
19 0.156165 0.636894 0.555696 0.191929 ... 0.936032 0.803028 0.697305 0
[20 rows x 16 columns]https://stackoverflow.com/questions/64963270
复制相似问题