首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于python中的无集合将单行拆分为多行

基于python中的无集合将单行拆分为多行
EN

Stack Overflow用户
提问于 2020-11-23 06:01:59
回答 1查看 100关注 0票数 1

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

每个记录都有相同的类变量。

我正在试图找出一个python程序来在大约149个记录数据集上完成这个任务。

有人能帮忙吗。

谢谢你,N

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-23 06:18:54

您可以使用广播来屏蔽--它意味着比较np.arange按索引长度创建的数组和用列长度除以整数除以3的三元组的数组:

代码语言:javascript
复制
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]

代码语言:javascript
复制
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)))

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64963270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档