在Pandas列中重新匹配时间戳

2024-04-27 00:55:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DataFrame,它有两个时间戳列,其中一个用作重采样的索引,另一个作为列。如果我重新对数据帧进行采样,剩下的一个作为列将被删除。我希望它被重新采样,就好像它是一个数字列(它确实是):

import numpy as np
import pandas as pd
init_time=pd.date_range(start='2010-01-01 00:00', end='2010-01-05 00:00', freq='12H')
valid_time=pd.date_range(start='2010-01-01 00:00', end='2010-01-05 00:00', freq='12H')
data = np.random.random(len(valid_time))
frame = pd.DataFrame(index=valid_time, data=data)
frame['init_time'] = init_time

DataFrame有一个索引、一个数字列和一个时间戳列

^{pr2}$

现在重新采样到每日:

daily = frame.resample('D', how='mean')

             0
2010-01-01   0.547736
2010-01-02   0.554740
2010-01-03   0.389090
2010-01-04   0.222396
2010-01-05   0.621703

我的init_time列已被删除。我可以先将其转换为原始整数列,但有没有更简单的方法?在


Tags: importdataframedatadatetimeinitasnp
1条回答
网友
1楼 · 发布于 2024-04-27 00:55:19

这不是针对datelike(mean)实现的,但可以通过以下方式实现:

得到数值结果

In [48]: numeric = frame.resample('D',how='mean')

得到类似日期的结果。首先获取datelike列

^{pr2}$

然后对它们进行重新采样;需要将它们视为整数来计算;时间戳将处理这个浮点输入(基本上四舍五入到最接近的纳秒)

In [50]: datelike = datelike.resample('D',
         how=lambda x: Timestamp(x.view('i8').mean()))

把它们放在一起

In [51]: concat([numeric,datelike],axis=1)
Out[51]: 
                   0           init_time
2010-01-01  0.798880 2010-01-01 06:00:00
2010-01-02  0.859781 2010-01-02 06:00:00
2010-01-03  0.515503 2010-01-03 06:00:00
2010-01-04  0.505557 2010-01-04 06:00:00
2010-01-05  0.979835 2010-01-05 00:00:00

[5 rows x 2 columns]

相关问题 更多 >