Pandas python每n列重新整形一次

Pandas python每n列重新整形一次,pandas,dataframe,Pandas,Dataframe,我刚刚开始学习python,需要一些帮助。我有一个看起来像“输入数据”的数据框,我想要的是每N列堆叠一次。换句话说,我想要一个数据帧,其中每N列被追加到下面的前m行 身份证件 城市 第1列 第2列 第3列 第4列 第5列 第6栏 第7栏 第8栏 第9栏 第10栏 1. 1. 51 155 255 355 455 666 777 955 55 553 2. 0 52 155 255 355 455 666 777 595 55 553 3. 楠 53 155 255 355 455 666 777

我刚刚开始学习python,需要一些帮助。我有一个看起来像“输入数据”的数据框,我想要的是每N列堆叠一次。换句话说,我想要一个数据帧,其中每N列被追加到下面的前m行

身份证件 城市 第1列 第2列 第3列 第4列 第5列 第6栏 第7栏 第8栏 第9栏 第10栏 1. 1. 51 155 255 355 455 666 777 955 55 553 2. 0 52 155 255 355 455 666 777 595 55 553 3. 楠 53 155 255 355 455 666 777 559 55 535 4. 1. 54 155 255 355 545 666 777 559 55 535 5. 7. 55 155 255 355 455 666 777 955 55 535 [74]中的
In:column_list=[df.columns[k:k+5]表示范围内的k(2,len(df.columns),5)]
在[75]中:列\u列表
出[75]:
[索引(['Col 1','Col 2','Col 3','Col 4','Col 5'],dtype='object'),
索引(['Col 6','Col 7','Col 8','Col 9','Col 10'],dtype='object')]
在[76]中:dfs=[df[['id','city']+columns.tolist()]。为列列表中的列重命名(columns=dict(zip(columns,range(5)))
在[77]中:dfs
Out[77]:
[id城市0 1 2 3 4
0   1   1.0  51  155  255  355  455
1   2   0.0  52  155  255  355  455
2 3南53 155 255 355 455
3   4   1.0  54  155  255  355  545
4   5   7.0  55  155  255  355  455,
id城市0 1 2 3 4
0   1   1.0  666  777  955  55  553
1   2   0.0  666  777  595  55  553
2 3南666757559535
3   4   1.0  666  777  559  55  535
4   5   7.0  666  777  955  55  535]
在[78]中:pd.concat(dfs,ignore_index=True)
出[78]:
id城市0 1 2 3 4
0   1   1.0   51  155  255  355  455
1   2   0.0   52  155  255  355  455
2 3南53 155 255 355 455
3   4   1.0   54  155  255  355  545
4   5   7.0   55  155  255  355  455
5   1   1.0  666  777  955   55  553
6   2   0.0  666  777  595   55  553
73NAN666757559535
8   4   1.0  666  777  559   55  535
9   5   7.0  666  777  955   55  535
解释:

  • 首先为每个切片生成所需的列
  • pd.concat
    要求列表中所有数据帧的列名相同,因此在
    rename(columns=dict(zip(columns,range(5)))中进行重命名
    。我们只是将切片列重命名为0,1,2,3,4
  • 最后一步是把每件事都做完

  • 编辑

    根据OP的评论:


    抱歉@Asish M。但是如何在dfs的每个数据集中为数据集编号添加一列,例如-在这里,我们将数据集拆分为2,因此我需要一列,其中表示第一个1到5个ID-‘first’(或1),然后在输出中再次表示另一个1到5个ID-‘second’(或2)。我希望这是在制造场面

    dfs=[df[['id','city']+columns.tolist()]。分配(拆分组=idx)。重命名(列=dict(zip(列,范围(5)))用于idx,枚举(列列表)中的列)

    df.assign(split\u group=idx)
    创建一列
    “split\u group”
    ,其值=
    idx
    。通过在[74]:column\u list=[df.columns[k:k+5]中为范围内的k(2,len(df.columns),5)枚举
    列列表,可以得到idx
    在[75]中:列\u列表
    出[75]:
    [索引(['Col 1','Col 2','Col 3','Col 4','Col 5'],dtype='object'),
    索引(['Col 6','Col 7','Col 8','Col 9','Col 10'],dtype='object')]
    在[76]中:dfs=[df[['id','city']+columns.tolist()]。为列列表中的列重命名(columns=dict(zip(columns,range(5)))
    在[77]中:dfs
    Out[77]:
    [id城市0 1 2 3 4
    0   1   1.0  51  155  255  355  455
    1   2   0.0  52  155  255  355  455
    2 3南53 155 255 355 455
    3   4   1.0  54  155  255  355  545
    4   5   7.0  55  155  255  355  455,
    id城市0 1 2 3 4
    0   1   1.0  666  777  955  55  553
    1   2   0.0  666  777  595  55  553
    2 3南666757559535
    3   4   1.0  666  777  559  55  535
    4   5   7.0  666  777  955  55  535]
    在[78]中:pd.concat(dfs,ignore_index=True)
    出[78]:
    id城市0 1 2 3 4
    0   1   1.0   51  155  255  355  455
    1   2   0.0   52  155  255  355  455
    2 3南53 155 255 355 455
    3   4   1.0   54  155  255  355  545
    4   5   7.0   55  155  255  355  455
    5   1   1.0  666  777  955   55  553
    6   2   0.0  666  777  595   55  553
    73NAN666757559535
    8   4   1.0  666  777  559   55  535
    9   5   7.0  666  777  955   55  535
    
    解释:

  • 首先为每个切片生成所需的列
  • pd.concat
    要求列表中所有数据帧的列名相同,因此在
    rename(columns=dict(zip(columns,range(5)))中进行重命名
    。我们只是将切片列重命名为0,1,2,3,4
  • 最后一步是把每件事都做完

  • 编辑

    根据OP的评论:


    抱歉@Asish M。但是如何在dfs的每个数据集中为数据集编号添加一列,例如-在这里,我们将数据集拆分为2,因此我需要一列,其中表示第一个1到5个ID-‘first’(或1),然后在输出中再次表示另一个1到5个ID-‘second’(或2)。我希望这是在制造场面

    dfs=[df[['id','city']+columns.tolist()]。分配(拆分组=idx)。重命名(列=dict(zip(列,范围(5)))用于idx,枚举(列列表)中的列)


    df.assign(split\u group=idx)
    创建一列
    “split\u group”
    ,其值=
    idx
    。您可以通过使用
    df1=df[['id'、'city'、'Col1'、'Col2'、'Col3'、'Col4'、'Col5']
    df2
    尝试枚举
    pd.concat(df1,df2)
    列列表来获得idx,但使用
    df1=df[[id'、'city'、'Col1'、'Col2'、'Col3'、'Col4'、'Col5']]
    df2
    相同,但使用Col6-Col10(假设您的原始数据帧名为
    df
    ),谢谢@Dames的回复。但我总共有10K列(例如-‘Col1’、‘Col2’…‘Col10089’),这些需要在输出df中产生30列(例如-‘Col1’、‘Col2’…‘Col30)。它将数据放错了位置存在一个选项
    pd.concat(df1,df2,copy=False)
    它可能在这里工作。否则,您可以尝试通过
    df[df.columns[2:].to_numpy()
    和操纵(e。