首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将大型数据帧内插到稀疏的不规则索引上

将大型数据帧内插到稀疏的不规则索引上
EN

Stack Overflow用户
提问于 2013-08-02 02:44:10
回答 2查看 295关注 0票数 2

我有一个数据帧,其中包含以30分钟为间隔采样的几年数据(来自连续水质传感器的7个参数),另一个数据帧包含数百个随机时间点的数据,精度为1分钟。我想找出这7个参数在几百个随机时间点的插值值。

下面是这些数据帧的几行内容:

代码语言:javascript
运行
复制
print df1    
                    Temp  SpCond   Sal  DO_pct  DO_mgl  Depth   pH  Turb
2002-07-16 14:00:00  26.0   45.31  29.3    71.6     4.9   0.95  7.9    -5
2002-07-16 14:30:00  25.9   45.22  29.2    70.4     4.9   0.98  7.9    -6
2002-07-16 15:00:00  26.0   44.92  29.0    76.2     5.3   1.02  7.9    -6
2002-07-16 15:30:00  26.0   45.06  29.1    77.9     5.4   1.06  7.9    -5
2002-07-16 16:00:00  25.9   45.23  29.2    67.0     4.6   1.11  7.8    -6
2002-07-16 16:30:00  25.9   45.33  29.3    72.9     5.0   1.17  7.9    -6
2002-07-16 17:00:00  25.9   45.46  29.4    65.8     4.5   1.21  7.9    -6
2002-07-16 17:30:00  25.9   45.40  29.4    70.5     4.9   1.19  7.9    -6
2002-07-16 18:00:00  25.9   45.27  29.3    74.3     5.1   1.15  7.9    -6
2002-07-16 18:30:00  25.8   45.57  29.5    67.6     4.7   1.11  7.8    -6
...

print df2
                      PO4F   NH4F   NO2F   NO3F  NO23F  CHLA_N
DateTimeStamp                                                 
2002-07-16 14:01:00  0.053  0.073  0.005  0.021  0.026     8.6
2002-07-16 16:05:00  0.029  0.069  0.002  0.016  0.018     9.6
2002-07-16 18:09:00  0.023  0.073  0.000    NaN  0.014     5.8
...

我想要在df2的索引值中找到df1的值,但通过阅读文档和其他堆栈溢出答案,我可以找到的唯一方法是将df1放在一分钟的时间基础上(这将生成一堆nans),然后使用Series.interpolate填充nans,然后在df2的离散时间提取出一分钟的值。这似乎是难以置信的浪费。一定有别的办法,对吧?

EN

Stack Overflow用户

发布于 2013-08-02 03:26:58

这是一种我认为你想要的方法

开始帧df1和df2

代码语言:javascript
运行
复制
In [100]: df1
Out[100]: 
                     Temp  SpCond   Sal  DO_pct  DO_mgl  Depth   pH  Turb
time                                                                     
2002-07-16 14:00:00  26.0   45.31  29.3    71.6     4.9   0.95  7.9    -5
2002-07-16 14:30:00  25.9   45.22  29.2    70.4     4.9   0.98  7.9    -6
2002-07-16 15:00:00  26.0   44.92  29.0    76.2     5.3   1.02  7.9    -6
2002-07-16 15:30:00  26.0   45.06  29.1    77.9     5.4   1.06  7.9    -5
2002-07-16 16:00:00  25.9   45.23  29.2    67.0     4.6   1.11  7.8    -6
2002-07-16 16:30:00  25.9   45.33  29.3    72.9     5.0   1.17  7.9    -6
2002-07-16 17:00:00  25.9   45.46  29.4    65.8     4.5   1.21  7.9    -6
2002-07-16 17:30:00  25.9   45.40  29.4    70.5     4.9   1.19  7.9    -6
2002-07-16 18:00:00  25.9   45.27  29.3    74.3     5.1   1.15  7.9    -6
2002-07-16 18:30:00  25.8   45.57  29.5    67.6     4.7   1.11  7.8    -6

In [101]: df2
Out[101]: 
                      P04F   NH4F   N02F   N03F  NO23F  CHLA_N
time                                                          
2002-07-16 14:01:00  0.053  0.073  0.005  0.021  0.026     8.6
2002-07-16 16:05:00  0.029  0.069  0.002  0.016  0.018     9.6
2002-07-16 18:09:00  0.023  0.073  0.000    NaN  0.014     5.8

计算一个四舍五入的时间(以纳秒为单位转换为int,然后四舍五入到最接近的30*60秒)。如果你想向上或向下(到接下来的1/2小时),你可能不得不调整。

代码语言:javascript
运行
复制
In [102]: new_index = pd.DatetimeIndex(int(1e9*30*60)*(np.round(df2.index.asi8/(1e9*30*60))).astype(np.int64)).values

In [104]: new_index
Out[104]: 
array(['2002-07-16T10:00:00.000000000-0400',
       '2002-07-16T12:00:00.000000000-0400',
       '2002-07-16T14:00:00.000000000-0400'], dtype='datetime64[ns]')

复制只是为了避免修改原始帧。设置新索引

代码语言:javascript
运行
复制
In [105]: df3 = df2.copy()

In [106]: df3.index = new_index

子选择和连接

代码语言:javascript
运行
复制
In [107]: df1.loc[df3.index].join(df3)
Out[107]: 
                     Temp  SpCond   Sal  DO_pct  DO_mgl  Depth   pH  Turb   P04F   NH4F   N02F   N03F  NO23F  CHLA_N
2002-07-16 14:00:00  26.0   45.31  29.3    71.6     4.9   0.95  7.9    -5  0.053  0.073  0.005  0.021  0.026     8.6
2002-07-16 16:00:00  25.9   45.23  29.2    67.0     4.6   1.11  7.8    -6  0.029  0.069  0.002  0.016  0.018     9.6
2002-07-16 18:00:00  25.9   45.27  29.3    74.3     5.1   1.15  7.9    -6  0.023  0.073  0.000    NaN  0.014     5.8
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18002070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档