重塑具有重复类型的数据框

Reshaping data frame with repeating types

我有一个名为 nf 的数据框,如下所示:

A     B   C   D   E   A.1   B.1    C.1   D.1   E.1    A.2   B.2   C.2  D.2   E.2   F.2

122  434 345 435 566 657 466  762 123 645  
434  453 786 654 980 424 786  897 564 243  345 455 432 435 432  
234  553 588 899 533 
123  875 789 456 876 667 988  887 234 342

等等....

值每 5 列重复一次,在第 3 行我没有下半部分的值。

以上提供的值只是我拥有的原始值的一个示例。原来我有 50 列,值每 10 列重复一次。行我有 alomst 120k。我想重塑这些值,以便只有 10 列,这样值会附加在最后,如下所示。

期望的输出是:

A     B   C   D   E   

122  434 345 435 566   
434  453 786 654 980  
234  553 588 899 533 
123  875 789 456 876 
657 466  762 123 645
424 786  897 564 243
667 988  887 234 342
345 455  432 435 432 

所有列值都应附加在行的底部。

您可以使用 stackgroupby

df.stack().groupby(level=1).apply(list).apply(pd.Series).T
Out[1178]: 
       A      B      C      D      E
0  122.0  434.0  345.0  435.0  566.0
1  657.0  466.0  762.0  123.0  645.0
2  434.0  453.0  786.0  654.0  980.0
3  424.0  786.0  897.0  564.0  243.0
4  345.0  455.0  432.0  435.0  432.0
5  234.0  553.0  588.0  899.0  533.0
6  123.0  875.0  789.0  456.0  876.0
7  667.0  988.0  887.0  234.0  342.0

更新

df.apply(lambda x : ','.join(x[x.notnull()].astype(str))).groupby(level=0).apply(','.join).str.split(',',expand=True).T
Out[1203]: 
       A      B      C      D      E     F
0  122.0  434.0  345.0  435.0  566.0      
1  434.0  453.0  786.0  654.0  980.0  None
2  234.0  553.0  588.0  899.0  533.0  None
3  123.0  875.0  789.0  456.0  876.0  None
4  657.0  466.0  762.0  123.0  645.0  None
5  424.0  786.0  897.0  564.0  243.0  None
6  667.0  988.0  887.0  234.0  342.0  None
7  345.0  455.0  432.0  435.0  432.0  None