python - 在数据框末尾添加 3 个重复列

标签 python pandas dataframe

我有以下格式的数据:

       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 等进行编程?预先感谢您的回答

真诚的,

埃利亚斯

最佳答案

使用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         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

Numpy 解决方案是可能的,但因为最后有一些字符串需要转换为 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         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 - 在数据框末尾添加 3 个重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53681772/

相关文章:

python - 合并以相同字母开头的 pandas DataFrame 列

python - 操作从 dict(tuple-float) 创建的 DataFrame

python - 如何在 python 中使用生成器循环大型 Parquet 文件?

python - 使用列表理解映射列表中的项目?

python - 将列表转换为 numpy 数组而不使用太多 RAM

python - 如何递归模拟随机游走?无循环(Python)

python - 将 unicode 字符串转换为 utf-8

python - 使用 pandas 联合列值组

基于列子串的行均值

python - 使用 python pandas 对大型 csv 文件的汇总统计