在我的数据框末尾添加 3 个重复列

我有以下格式的数据:


       0        1         2         3        4         5         6    

0  09.08.00  31.6875 -0.017442  17.10.00  59.1250  0.002119  24.10.00 ...  

1  10.08.00  31.7031  0.000492  18.10.00  59.1250  0.000000  25.10.00 ...

2  11.08.00  31.7656  0.001971  19.10.00  59.3125  0.003171  26.10.00 ...  

3  14.08.00  31.5625 -0.006394  20.10.00  59.5625  0.004215  27.10.00 ...  

4  15.08.00  31.5000 -0.001980  23.10.00  59.1250 -0.007345  30.10.00 ...  


       413       414     415       416  

0   0.004704  01.05.18  133.48 -0.034991  ......  

1  -0.001725  02.05.18  138.58  0.038208  ...... 

2  0.000247  03.05.18  141.56  0.021504   ......

3  0.000987  04.05.18  139.76 -0.012715   ......

4  0.000493  07.05.18  139.63 -0.000930   .......

如您所见,数据分为 3 列用于多个组(在本例中为代码)。更重要的是,我拥有的数据是在不同时间段内记录的。例如,第一组可能有 100 天的数据,第二组只有 25 天,依此类推。这意味着我们有不同数量的行,每个组的数据条目。


我希望最后的数据帧有 3 列而不是 416 列。所以我想以某种方式一次将 3 列附加到现有的数据帧。所以最终结果应该是这样的:


       0        1         2              

0  09.08.00  31.6875 -0.017442  

1  10.08.00  31.7031  0.000492  

2  11.08.00  31.7656  0.001971  

3  14.08.00  31.5625 -0.006394    

4  15.08.00  31.5000 -0.001980

5  17.10.00  59.1250  0.002119  

6  18.10.00  59.1250  0.000000  

7  19.10.00  59.3125  0.003171  

8  20.10.00  59.5625  0.004215  

9  23.10.00  59.1250 -0.007345

我希望这个问题足够清楚。我将如何在 Python 中使用 Pandas 等进行编程?


白衣非少年
浏览 119回答 2
2回答

慕盖茨4494581

stack与通过模和整数除法创建的多索引一起使用:a = np.arange(len(df.columns))df.columns = [a % 3, a // 3]df = df.stack().sort_index(level=1).reset_index(drop=True)print (df)          0        1         20  09.08.00  31.6875 -0.0174421  10.08.00  31.7031  0.0004922  11.08.00  31.7656  0.0019713  14.08.00  31.5625 -0.0063944  15.08.00  31.5000 -0.0019805  17.10.00  59.1250  0.0021196  18.10.00  59.1250  0.0000007  19.10.00  59.3125  0.0031718  20.10.00  59.5625  0.0042159  23.10.00  59.1250 -0.007345Numpy 解决方案是可能的,但因为最后有一些字符串需要转换为floats:a = np.reshape(df.values,(len(df), -1, 3)).swapaxes(0,1).reshape(-1, 3)df = pd.DataFrame(a)df[[1,2]] = df[[1,2]].astype(float)print (df)          0        1         20  09.08.00  31.6875 -0.0174421  10.08.00  31.7031  0.0004922  11.08.00  31.7656  0.0019713  14.08.00  31.5625 -0.0063944  15.08.00  31.5000 -0.0019805  17.10.00  59.1250  0.0021196  18.10.00  59.1250  0.0000007  19.10.00  59.3125  0.0031718  20.10.00  59.5625  0.0042159  23.10.00  59.1250 -0.007345
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python