Pandas python每n列重新整形一次
我刚刚开始学习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]中的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
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。