微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-使用多个DataFrame在熊猫中的时间偏移

我有两个熊猫数据框:

一个称为sdtarray的浮点数(代表秒):

    z1  z2  z3  ...
0   NaN NaN NaN
1   2.6 3.4 63.0
2   NaN NaN NaN
3   0.1 1.1 60.7
4   4.7 5.2 64.9
5   0.1 0.6 61.1
...
[33945 rows x 95 columns]

一个格式化日期(thenewtime):

0    2014-09-01 05:22:00
1    2014-09-01 05:38:00
2    2014-09-01 06:08:00
3    2014-09-01 06:27:00
4    2014-09-01 06:37:00
5    2014-09-01 06:57:00
...
Name: thenewtime, dtype: datetime64[ns]

用对应的日期(相同的行索引但thenewtime DataFrame)使float DataFrame(sdtarray)中的每一行偏移的最佳方法是什么-以日期的DataFrame结尾?

示例输出为:

    z4                  z5                  z6              …
0   NaN                 NaN                 NaN 
1   01/09/2014 05:38:02 01/09/2014 05:38:03 01/09/2014 05:39:03 
2   NaN                 NaN                 NaN 
3   01/09/2014 06:27:00 01/09/2014 06:27:01 01/09/2014 06:28:00 
4   01/09/2014 06:37:04 01/09/2014 06:37:05 01/09/2014 06:38:04 
5   01/09/2014 06:57:00 01/09/2014 06:57:00 01/09/2014 06:58:01
…               

我正在使用pandas 0.13.1,我知道这无济于事,但由于与ArcGIS的要求,它必须与numpy 1.7.1兼容,因此无法解决.

我设法在每一行上使用itertuples获得正确的输出(并使用timedelta,但是对于大数据(34k行乘100 cols)来说,它的运行速度非常慢),并且必须有一种更有效的方式不依赖于检查循环中的每个rol / column .

任何帮助和指导,将不胜感激:)

解决方法:

在下面,首先检查秒(df1)不是NaN,然后​​将秒(df1)的数据帧转换为datetime.timedelta对象.然后,将这些值添加到df2中的日期.

在Pandas 0.13.1下测试.

import datetime as dt
import pandas as pd

df1 = pd.DataFrame({'z1': [None, 2.6, None, 0.1, 4.7, 0.1], 
                    'z2': [None, 3.4, None, 1.1, 5.2, 0.6], 
                    'z3': [None, 63, None, 60.7, 64.9, 61.1]})
df2 = pd.DataFrame({'Datetime': ['2014-09-01 05:22', '2014-09-01 05:38', '2014-09-01 06:08', 
                                 '2014-09-01 06:27', '2014-09-01 06:37', '2014-09-01 06:57']})
df2['Datetime'] = pd.to_datetime(df2.Datetime)

result = df1.applymap(lambda x: dt.timedelta(seconds=x) if not np.isnan(x) else None) 
         + np.tile(df2.values, (1, df1.shape[1]))

>>> pd.DataFrame(result)
                          z1                         z2                         z3
0                        NaT                        NaT                        NaT
1 2014-09-01 05:38:02.600000 2014-09-01 05:38:03.400000        2014-09-01 05:39:03
2                        NaT                        NaT                        NaT
3 2014-09-01 06:27:00.100000 2014-09-01 06:27:01.100000 2014-09-01 06:28:00.700000
4 2014-09-01 06:37:04.700000 2014-09-01 06:37:05.200000 2014-09-01 06:38:04.900000
5 2014-09-01 06:57:00.100000 2014-09-01 06:57:00.600000 2014-09-01 06:58:01.100000

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐