我有两个熊猫数据框:
一个称为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 举报,一经查实,本站将立刻删除。