基于列数重构pandas数据框

2 python pivot-table dataframe pandas

我有以下熊猫数据框。

ID   Col1   Col2   Col3   Col4   Col5   Col6   Col7   Col8   Col9
1     A      B       C      A     B      C      A      B      C
2     D      E       F      D     E      F      D      E      F 
Run Code Online (Sandbox Code Playgroud)

我想通过重组每三列值来获得下表。

ID   Col_1   Col_2   Col_3
1      A       B       C
       A       B       C
       A       B       C

2      D       E       F
       D       E       F
       D       E       F
Run Code Online (Sandbox Code Playgroud)

或者

ID   Col_1   Col_2   Col_3
1      A       B       C
1      A       B       C
1      A       B       C
2      D       E       F
2      D       E       F
2      D       E       F
Run Code Online (Sandbox Code Playgroud)

有什么有效的方法可以做到吗?我试图在 StackOverflow 社区中找到类似的例子,但没有找到。如果你有,你可以指点我。

任何帮助表示赞赏!

jez*_*ael 5

您可以使用DataFrame.stackwith MultiIndexby all 列而无需ID通过整数和模除法创建:

df = df.set_index('ID')
c = np.arange(len(df.columns))
df.columns = [c // 3, c % 3]
df1 = (df.stack()
         .reset_index(level=1, drop=True)
         .rename(columns= lambda x: f'Col_{x+1}')
         .reset_index())
print (df1)
   ID Col_1 Col_2 Col_3
0   1     A     A     A
1   1     B     B     B
2   1     C     C     C
3   2     D     D     D
4   2     E     E     E
5   2     F     F     F
Run Code Online (Sandbox Code Playgroud)