为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2021-09-11 15:04:40
我有以下格式的数据:       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.0019805  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 等进行编程?
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

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


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号