使用重复类型

时间:2018-04-04 21:27:16

标签: pandas reshape

我有一个名为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个列重复一次。而行我有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 

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

1 个答案:

答案 0 :(得分:0)

您可以使用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