Pandas 根据python中的集合数将单行拆分为多行

Pandas 根据python中的集合数将单行拆分为多行,pandas,numpy,csv,Pandas,Numpy,Csv,我试图将一个包含15个变量的记录拆分为5个记录集,第一个记录包含3个变量数据,其余12个变量为空值,第二个记录包含6个变量,其余9个变量为空值,第三个记录包含9个变量,其余6个变量为空值 每个记录都有相同的类变量 我正试图找出一个python程序来在大约149个记录数据集上实现这一点 有人能帮忙吗 谢谢, N您可以使用广播来屏蔽-这意味着将由np.arange创建的数组按索引长度与由列长度除以整数除以3创建的数组进行三元组比较: np.random.seed(2020) df = (pd.Da

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

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

我正试图找出一个python程序来在大约149个记录数据集上实现这一点

有人能帮忙吗

谢谢,
N

您可以使用广播来屏蔽-这意味着将由
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]



请与预期输出共享一个输入示例,以便更好地理解。@MayankPorwal。。为了更好地理解而添加的图像欣赏您的答案,但似乎您的代码只适用于单个记录。我想把这个概念应用到df的每条记录上,每条记录包含149条独特的记录,每个记录包含3组数据spliting@Naseer-你现在能测试吗
N
是按列数进行必要更改的。看起来它正在按预期工作。谢谢耶斯雷尔的帮助。我已经使用了很多for循环,其中包含中断和混乱的代码。再次感谢@纳塞尔-当然,好主意。我尝试创建最通用的解决方案,因此添加
N
-只有必要的N可以被
3
整除,比如
3,9,15,99,150
。)你能建议我在哪里修改代码以分配不同变量编号的集合。比如第一个集合包含3个,第二个集合包含5个,第三个集合包含4个,第四个集合包含3个?
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]