使用时间窗口的标签回填缺失数据

2023-12-30

我想根据时间(1天,2天)用不同的标签回填每一列。 这是代码:

from datetime import datetime, timedelta
import pandas as pd
import numpy as np
import random
np.random.seed(11) 


date_today = datetime.now()
ndays = 15
df = pd.DataFrame({'date': [date_today + timedelta(days=x) for x in range(ndays)], 
                   'test': pd.Series(np.random.randn(ndays)),     'test2':pd.Series(np.random.randn(ndays))})

df = df.set_index('date')
df = df.mask(np.random.random(df.shape) < .7)
print(df) # this will be the dataset that I generate for this question 

# my orginal data set have labels that is why I convert it to str
df['test']=df['test'].astype(str)
df['test2']=df['test2'].astype(str)
df.replace('nan', np.nan, inplace = True)

for I in df.dropna().index.values:
        end=I
        start=end-np.timedelta64(24,'h')
        start2=end-np.timedelta64(48,'h')
        df[(df.index >= start) & (df.index <= end)]=df[(df.index >= start) & (df.index <= end)].bfill()

我的初始数据集将如下所示:

                                test     test2
date                                          
2018-03-07 11:28:23.028856       NaN       NaN
2018-03-08 11:28:23.028856       NaN       NaN
2018-03-09 11:28:23.028856 -0.484565  1.574634
2018-03-10 11:28:23.028856 -2.653319       NaN
2018-03-11 11:28:23.028856       NaN       NaN
2018-03-12 11:28:23.028856       NaN       NaN
2018-03-13 11:28:23.028856 -0.536629       NaN
2018-03-14 11:28:23.028856       NaN  0.725752
2018-03-15 11:28:23.028856       NaN  1.549072
2018-03-16 11:28:23.028856 -1.065603  0.630080
2018-03-17 11:28:23.028856       NaN       NaN
2018-03-18 11:28:23.028856 -0.475733  0.732271
2018-03-19 11:28:23.028856       NaN -0.642575
2018-03-20 11:28:23.028856       NaN -0.178093
2018-03-21 11:28:23.028856       NaN -0.573955

我想要得到的是这样的: 我尝试了不同的方法,但找不到 bfill 的方法,bfill 不获取任何值参数,而 fillna 只获取方法或值。

                                test     test2
date                                          
2018-03-07 11:28:23.028856  -0.484565_2D 1.574634_2D
2018-03-08 11:28:23.028856 -0.484565_D   1.574634_D
2018-03-09 11:28:23.028856 -0.484565     1.574634
2018-03-10 11:28:23.028856 -2.653319       NaN
2018-03-11 11:28:23.028856 -0.536629_2D       NaN
2018-03-12 11:28:23.028856 -0.536629_D    0.725752_2D
2018-03-13 11:28:23.028856 -0.536629     0.725752_D
2018-03-14 11:28:23.028856 -1.065603_2D  0.725752
2018-03-15 11:28:23.028856 -1.065603_D   1.549072
2018-03-16 11:28:23.028856 -1.065603     0.630080
2018-03-17 11:28:23.028856 -0.475733_D   0.732271_D
2018-03-18 11:28:23.028856 -0.475733     0.732271
2018-03-19 11:28:23.028856       NaN    -0.642575
2018-03-20 11:28:23.028856       NaN    -0.178093
2018-03-21 11:28:23.028856       NaN    -0.573955

Update:我的原始数据集的时间戳不统一,因此此代码创建类似的时间戳:

date_today = datetime.now()
ndays = 15
df = pd.DataFrame({'date': [date_today + timedelta(days=(abs(np.random.randn(1))*2)[0]*x) for x in range(ndays)], 
                   'test': pd.Series(np.random.randn(ndays)),     'test2':pd.Series(np.random.randn(ndays))})


df1=pd.DataFrame({'date': [date_today + timedelta(hours=x) for x in range(ndays)], 
                   'test': pd.Series(np.random.randn(ndays)),     'test2':pd.Series(np.random.randn(ndays))})
df2=pd.DataFrame({'date': [date_today + timedelta(days=x)-timedelta(seconds=100*x) for x in range(ndays)], 
                   'test': pd.Series(np.random.randn(ndays)),     'test2':pd.Series(np.random.randn(ndays))})
df=df.append(df1)
df=df.append(df2)


df = df.set_index('date')
df = df.mask(np.random.random(df.shape) < .7)
print(df) # this will be the dataset that I generate for this question 

# my orginal data set have labels that is why I convert it to str
df['test']=df['test'].astype(str)
df['test2']=df['test2'].astype(str)
df.replace('nan', np.nan, inplace = True)

如果有人能帮助我,我真的很感激

提前致谢。


使用 fillna 和方法 backfill & limit 2 创建一个填充的数据框

filled = df.fillna(method='bfill', limit=2)
# filled outputs:
                                       test            test2
date
2018-03-07 16:12:25.944362  -0.484565132221     1.5746340731
2018-03-08 16:12:25.944362  -0.484565132221     1.5746340731
2018-03-09 16:12:25.944362  -0.484565132221     1.5746340731
2018-03-10 16:12:25.944362   -2.65331855926              NaN
2018-03-11 16:12:25.944362  -0.536629362235              NaN
2018-03-12 16:12:25.944362  -0.536629362235   0.725752224799
2018-03-13 16:12:25.944362  -0.536629362235   0.725752224799
2018-03-14 16:12:25.944362   -1.06560298045   0.725752224799
2018-03-15 16:12:25.944362   -1.06560298045    1.54907163337
2018-03-16 16:12:25.944362   -1.06560298045   0.630079822493
2018-03-17 16:12:25.944362  -0.475733492683   0.732271353885
2018-03-18 16:12:25.944362  -0.475733492683   0.732271353885
2018-03-19 16:12:25.944362              NaN  -0.642575392433
2018-03-20 16:12:25.944362              NaN  -0.178093175312
2018-03-21 16:12:25.944362              NaN   -0.57395455941

创建一个布尔数据框来指示单元格是否已填充

is_filled = df.isnull() & filled.notnull()
# is_filled outputs:
                             test  test2
date
2018-03-07 16:12:25.944362   True   True
2018-03-08 16:12:25.944362   True   True
2018-03-09 16:12:25.944362  False  False
2018-03-10 16:12:25.944362  False  False
2018-03-11 16:12:25.944362   True  False
2018-03-12 16:12:25.944362   True   True
2018-03-13 16:12:25.944362  False   True
2018-03-14 16:12:25.944362   True  False
2018-03-15 16:12:25.944362   True  False
2018-03-16 16:12:25.944362  False  False
2018-03-17 16:12:25.944362   True   True
2018-03-18 16:12:25.944362  False  False
2018-03-19 16:12:25.944362  False  False
2018-03-20 16:12:25.944362  False  False
2018-03-21 16:12:25.944362  False  False

创建掩码以指示需要后缀的填充值_1D or _2D

one_d = (is_filled & ~is_filled.shift(-1).fillna(False)).applymap(lambda x: '_1D' if x else '')
two_d = (is_filled & is_filled.shift(-1).fillna(False)).applymap(lambda x: '_2D' if x else '')
suffix = pd.concat([one_d, two_d]).groupby('date').agg('max')
# suffix outputs: 

                             test test2
date
2018-03-07 16:12:25.944362  _2D   _2D
2018-03-08 16:12:25.944362  _1D   _1D
2018-03-09 16:12:25.944362
2018-03-10 16:12:25.944362
2018-03-11 16:12:25.944362  _2D
2018-03-12 16:12:25.944362  _1D   _2D
2018-03-13 16:12:25.944362        _1D
2018-03-14 16:12:25.944362  _2D
2018-03-15 16:12:25.944362  _1D
2018-03-16 16:12:25.944362
2018-03-17 16:12:25.944362  _1D   _1D
2018-03-18 16:12:25.944362
2018-03-19 16:12:25.944362
2018-03-20 16:12:25.944362
2018-03-21 16:12:25.944362

将后缀数据帧连接到填充的数据帧将浮点数转换为字符串并附加适当的后缀

final = filled.join(suffix, rsuffix='_x')
final.apply(lambda x: '{}{}'.format(x.test, x.test_x), axis=1)
# outputs:
date
2018-03-07 16:12:25.944362    -0.484565132221_2D
2018-03-08 16:12:25.944362    -0.484565132221_1D
2018-03-09 16:12:25.944362       -0.484565132221
2018-03-10 16:12:25.944362        -2.65331855926
2018-03-11 16:12:25.944362    -0.536629362235_2D
2018-03-12 16:12:25.944362    -0.536629362235_1D
2018-03-13 16:12:25.944362       -0.536629362235
2018-03-14 16:12:25.944362     -1.06560298045_2D
2018-03-15 16:12:25.944362     -1.06560298045_1D
2018-03-16 16:12:25.944362        -1.06560298045
2018-03-17 16:12:25.944362    -0.475733492683_1D
2018-03-18 16:12:25.944362       -0.475733492683
2018-03-19 16:12:25.944362                   nan
2018-03-20 16:12:25.944362                   nan
2018-03-21 16:12:25.944362                   nan

类似地,您可以生成填充和后缀系列test2。但是,我建议您保留test & test2作为数字类型并将填充和滞后信息存储在单独的列中(此处为列suffix将该信息存储在数据框中final).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用时间窗口的标签回填缺失数据 的相关文章

  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • Python:计算数据帧列中所有行中特定字符的实例数

    我有一个包含列 toaddress ccaddress body 的数据框 df 我想迭代数据帧的索引 以获取 toaddress 和 ccaddress 字段中电子邮件地址的最小 最大和平均数量 这是通过计算这两列中每个字段中的 和 的实
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案

随机推荐

  • 用perl分割一个带有多个空格的字符串?

    我正在尝试用多个空格分割一个字符串 我只想在有 2 个或更多空白的地方进行分割 我尝试了多种方法 但一直得到相同的输出 即它在每个字母后都会分裂 这是我尝试的最后一件事 cellMessage split s 2 g message for
  • Java 中的多重继承是如何工作的? [复制]

    这个问题在这里已经有答案了 Class Object是类层次结构的根 每个班级都有Object作为一个超类 那么 如果我扩展一个 API 类 它会像多重继承吗 显然 Java不支持多重继承 那么它是如何运作的呢 超类与父类不同 你只能有一位
  • 从非 ssl 端口 8080 重定向到 ssl 端口 8443

    我试图将非 SSL 端口 8080 上的流量重定向到 SSL 端口 8443 在 Jboss 4 2 3 GA 版本上 但它不起作用 当我在此端口上访问我的网络应用程序时 它会保留在该端口上并显示页面 这是我在 server xml 文件中
  • Java 文本文件大小(文件关闭前)

    我正在从一项服务收集完整的 HTML 该服务提供对大量博客和新闻网站的访问 我正在检查 HTML 实时 看看它是否包含一些关键字 如果它包含其中一个关键字 我会将 HTML 写入文本文件来存储它 我想这样做一个星期 因此我正在收集大量数据
  • 如果使用优化(-O2、-O3),为什么此代码的行为会有所不同?

    我必须编写一些检查例程 如果使用 O0 O1 O2 或 O3 它们的行为似乎会有所不同 下面我创建了一个适用于 O0 和 O1 的最小示例 但使用 O2 或 O3 行为发生了变化 在 O0 和 O1 情况下 for 循环递增整数 并且第一次
  • 通过单击 swift 中的 TableView 单元格转到 ViewController

    有一个类MenuViewController 其中记录了表中记录的数组 import Foundation import UIKit class MenuViewController UIViewController UITableView
  • 如何在 Woocommerce 中将“添加到购物车”文本更改为我自己的文本

    我在最新版本的 WordPress 中使用 Woocommerce V2 1 2 我用谷歌搜索过 他们给出了前端更改的解决方案 但我需要从后端进行更改 请提出解决上述问题的任何想法 这将会改变Add to cartwoocommerce 中
  • Visual Studio 代码 + MSTEST?

    有没有办法从 Visual Studio Code 运行和调试 MSTest V2 我很困惑 它从命令行运行得很好 dotnet test产生预期结果 这是我当前的 launch json 的样子 configurations name N
  • 将 .crt 文件转换为 .cer 和 .key

    我被要求帮助转换证书以进行续订 我获得了domainname crt 文件以及一些中间 crt 文件 但没有 key 文件 他们希望我将 CRT 转换为 CER 和 KEY 文件 我查看了以下内容 以及许多其他网站 但他们要么说我需要 ke
  • 在包“android”中找不到属性“showAsAction”的资源标识符

    正如标题所示 我在至少 3 个 XML 布局文件中遇到了该错误 但是 我在任何这些 XML 文件中都没有看到属性 showsAsAction 我是否错过了某些内容 或者我只是盲目的 是有问题的 XML 文件
  • Android 4.3:如何检查用户是否启用了锁定?

    如果用户没有锁定屏幕或仅启用了滑动功能 我希望我的应用程序表现不同 不存储内容 最高答案在这里 检查是否启用了锁定 https stackoverflow com questions 7768879 check whether lock w
  • 在 Mac 上安装 GNU GCC

    我最近对 Xcode 5 中包含的新 clang 编译器感到沮丧 我想知道在 OS X 上安装 GNU GCC 的最佳方法是什么 需要考虑的事项 我不想使用 MacPorts fink homebrew 或任何其他第三方包管理器 如果可能的
  • 从 HTML 表单发布 blob 的表单输入类型是什么?

    我想将录制的视频 保存为 blob 包含到将要发布的表单中 两个问题 发布 blob 所需的输入类型是什么 如何将 blob 分配给该输入类型 我所看到的一些内容建议使用文件的输入类型 表格示例
  • 如果任何列与一组值之一匹配,则保留行

    我有一个关于使用 R 进行子集化的简单问题 我想我已经很接近了 但还不太明白 基本上 我有 25 个感兴趣的列和大约 100 个值 我想保留其中一列中具有任何这些值的任何行 简单的例子 Values lt c 1 2 5 col1 lt c
  • AngularJS - 在 Angular 中声明服务的不同方式的主要区别是什么?

    我正在开发一个 AngularJS 应用程序 并试图坚持 AngularJs 中最有效和最广泛接受的开发风格 目前 我正在使用这种方式声明我的服务 如下所示 app factory MyService function function d
  • 创建对 IObservable 的弱订阅

    我想要做的是确保如果对我的观察者的唯一引用是可观察的 它会被垃圾收集并停止接收消息 假设我有一个带有列表框的控件 称为 消息 后面的代码如下 Short lived display of messages only while the us
  • jquery lavalamp 的问题

    由于某种原因 无论我点击哪个链接 我的背景颜色都会回到最左边的链接 有人知道如何让它保留在点击的链接上吗 css lamp float left margin 25px 0px 0px 90px clear both lavaLamp po
  • 异步编程 APM 与 EAP

    实际上有什么区别异步编程模型 and 基于事件的异步模式 使用哪种方法以及何时使用 The 异步编程模型 APM 是您看到的模型BeginMethod and EndMethod pairs 例如这里是一个Socket使用APM执行 var
  • 如果 Moose 构建器方法失败该怎么办?

    处理构建器方法中的失败的最佳方法是什么 例如 package MyObj use Moose use IO File has gt file name is gt ro isa gt Str required gt 1 has gt fil
  • 使用时间窗口的标签回填缺失数据

    我想根据时间 1天 2天 用不同的标签回填每一列 这是代码 from datetime import datetime timedelta import pandas as pd import numpy as np import rand