我有一个像这样的数据框
2014-11-26 09:05:19.669 -0.000610 0.000000 -0.001526 -0.000610 -0.000305
2014-11-26 09:05:20.169 -0.000610 -0.000610 0.000305 -0.000610 -0.000610
2014-11-26 09:05:20.669 -0.001831 -0.000916 -0.000610 0.000610 -0.000305
2014-11-26 09:05:21.169 -0.000916 -0.000305 -0.000305 -0.000610 -0.000610
2014-11-26 09:05:21.669 0.000000 -0.000916 -0.000610 -0.000305 -0.000610
2014-11-26 09:05:22.171 -0.001221 -0.000610 -0.000305 -0.000610 -0.000610
2014-11-26 09:05:22.669 -0.000916 -0.000305 0.000610 -0.000610 -0.000305
2014-11-26 09:05:23.169 -0.000610 -0.000610 -0.001221 -0.001221 -0.000610
索引是datetime。第一列是该日期时间的数据。后续数据采用1 ms的间隔。因此,列[0]取自索引,列[1]在日期时间+ 1ms,列[2] =日期时间+ 2ms,... 是否有一种简单的方法来创建一个新的数据框,其中一列已计算所有日期时间并在索引中插入正确的位置?这些专栏有2500个!
答案 0 :(得分:1)
确切的语法可能会有所不同,具体取决于您的具体方式。我从默认索引开始,时间存储在列'索引'并且是日期时间类型
>>> df
index x y z
0 2014-11-26 09:05:19.669 -0.000610 0.000000 -0.001526
1 2014-11-26 09:05:20.169 -0.000610 -0.000610 0.000305
2 2014-11-26 09:05:20.669 -0.001831 -0.000916 -0.000610
3 2014-11-26 09:05:21.169 -0.000916 -0.000305 -0.000305
第一步是堆叠数据,这样你就有了一个列,然后创建一个count-type列,告诉我们要为每个索引添加多少毫秒。
>>> df2 = df.set_index('index').stack().reset_index()
>>> df2['cumcnt'] = df2.groupby('index',as_index=False).cumcount()
index level_1 0 cumcnt
0 2014-11-26 09:05:19.669 x -0.000610 0
1 2014-11-26 09:05:19.669 y 0.000000 1
2 2014-11-26 09:05:19.669 z -0.001526 2
3 2014-11-26 09:05:20.169 x -0.000610 0
4 2014-11-26 09:05:20.169 y -0.000610 1
5 2014-11-26 09:05:20.169 z 0.000305 2
6 2014-11-26 09:05:20.669 x -0.001831 0
7 2014-11-26 09:05:20.669 y -0.000916 1
8 2014-11-26 09:05:20.669 z -0.000610 2
9 2014-11-26 09:05:21.169 x -0.000916 0
10 2014-11-26 09:05:21.169 y -0.000305 1
11 2014-11-26 09:05:21.169 z -0.000305 2
然后乘以' cumcnt'具有1毫秒TimeDelta的列,关于它......
>>> df2['index'] = df2['index'] + pd.to_timedelta('1ms') * df2['cumcnt']
index level_1 0 cumcnt
0 2014-11-26 09:05:19.669 x -0.000610 0
1 2014-11-26 09:05:19.670 y 0.000000 1
2 2014-11-26 09:05:19.671 z -0.001526 2
3 2014-11-26 09:05:20.169 x -0.000610 0
4 2014-11-26 09:05:20.170 y -0.000610 1
5 2014-11-26 09:05:20.171 z 0.000305 2
6 2014-11-26 09:05:20.669 x -0.001831 0
7 2014-11-26 09:05:20.670 y -0.000916 1
8 2014-11-26 09:05:20.671 z -0.000610 2
9 2014-11-26 09:05:21.169 x -0.000916 0
10 2014-11-26 09:05:21.170 y -0.000305 1
11 2014-11-26 09:05:21.171 z -0.000305 2