pandas 六个月的日期范围

2024-04-09

所以,这是我的数据框。

PatientNumber           QT         Answer   Answerdate  DiagnosisDate 
1        1          transferring     No      2017-03-03 2018-05-03     
2        1          preparing food   No      2017-03-03 2018-05-03     
3        1          medications      Yes     2017-03-03 2018-05-03     
4        2          transferring     No      2011-05-10 2012-05-04       
5        2          preparing food   No      2011-05-10 2012-05-04     
6        2          medications      No      2011-05-10 2012-05-04     
7        2          transferring     Yes     2011-15-03  2012-05-04     
8        2          preparing food   Yes     2011-15-03  2012-05-04     
9        2          medications      No      2011-15-03  2012-05-04     
10       2          transferring     Yes     2010-15-12 2012-05-04     
11       2          preparing food   No      2010-15-12 2012-05-04     
12       2          medications      No      2010-15-12 2012-05-04     
13       2          transferring     Yes     2009-10-10 2012-05-04     
14       2          preparing food   No      2009-10-10 2012-05-04     
15       2          medications      No      2009-10-10 2012-05-04     
16       3          medications      No      2008-10-10 2010-07-04     

我刚刚找到一个与我的问题相关的链接here https://stackoverflow.com/questions/48454189/pandas-date-range-for-six-monthly-values它没有得到任何正确的答案。

一些解释:对于每个患者编号,诊断日期都是唯一的。回答日期是他们填写问题的几次。

但我想做的是:?

我的目标是从DiagnosisDate every six month,并将其标记到一列上as the first 6 month record。在该列中,我们应该保存那六个月(前六​​个月、第二个月、第三个月……)。

例如对于这个数据框,DiagnosisDate for PatientNumber=1 is 2018-05-03所以它应该从那个时候开始6 month. the first 6 month is 2017-27-11由于最大的 AnswerDate 不属于该日期,因此不会被标记为first six month。 如果第一个answerdate属于该日期,它将被标记为first 6 month.

so here PatientNumber=1 got 3在专栏中6month,因为当我们从diagnosisdate 6 month回来,answerdate属于那个6 month稍后有时间。 所以这个数据框的输出将是:

PatientNumber           QT         Answer   Answerdate  DiagnosisDate  6month
1        1          transferring     No      2017-03-03 2018-05-03     3
2        1          preparing food   No      2017-03-03 2018-05-03     3
3        1          medications      Yes     2017-03-03 2018-05-03     3
4        2          transferring     No      2011-05-10 2012-05-04     1 
5        2          preparing food   No      2011-05-10 2012-05-04     1
6        2          medications      No      2011-05-10 2012-05-04     1
7        2          transferring     Yes     2011-15-04  2012-05-04    2
8        2          preparing food   Yes     2011-15-04  2012-05-04    2
9        2          medications      No      2011-15-04  2012-05-04    2
10       2          transferring     Yes     2010-15-12 2012-05-04     3
11       2          preparing food   No      2010-15-12 2012-05-04     3
12       2          medications      No      2010-15-12 2012-05-04     3
13       2          transferring     Yes     2009-10-10 2012-05-04     5
14       2          preparing food   No      2009-10-10 2012-05-04     5
15       2          medications      No      2009-10-10 2012-05-04     5
16       3          medications      No      2008-10-10 2010-07-04     4

对于 PatientNumber =2,将从DiagnosisDate =2012-05-04然后回到 6 个月。它将是2011-11-04.

我应用了这个:

data['6month'] = pd.date_range(end=data['diagnosisdate'],periods=2, freq='6M',closed='left')

首先它只关心月份,所以计算大约不准确, 我找不到一种方法来提及 6 个月的数字,就像我在上面的数据框中提到的那样(在第 6 个月列中,我的意思是 1 2,...而不是日期。

因此根据数据,我们可能会在列中看到6month的数字来自1...10(考虑诊断前 5 年)

很长的故事。希望有人能花点时间:)。

另外,我需要将整个专栏的结果保持原样。


这并不完全是您想要的,但可以提供足够好的结果。我认为你可以通过计算列 DiagnosisDate 和 Answerdate 之间的时间差,然后除以pd.np.timedelta64(6, 'M')(将频率更改为 6 个月)。那么你需要ceil函数获取上面的整数,例如:

data['6month'] = (pd.np.ceil((data['DiagnosisDate']-pd.Timedelta(days=1)-data['Answerdate'])
                                             /pd.np.timedelta64(6, 'M')).astype(int))

忽略负列:

data = data[(data['6month'] >= 0)]

根据您的样本,它给出:

    PatientNumber            QT Answer Answerdate DiagnosisDate  6month
1               1  transferring     No 2017-03-03    2018-03-05       3
2               1     preparing     No 2017-03-03    2018-03-05       3
3               1   medications    Yes 2017-03-03    2018-03-05       3
4               2  transferring     No 2011-10-05    2012-04-05       1
5               2     preparing     No 2011-10-05    2012-04-05       1
6               2   medications     No 2011-10-05    2012-04-05       1
7               2  transferring    Yes 2011-03-15    2012-04-05       3
8               2     preparing    Yes 2011-03-15    2012-04-05       3
9               2   medications     No 2011-03-15    2012-04-05       3
10              2  transferring    Yes 2010-12-15    2012-04-05       3
11              2     preparing     No 2010-12-15    2012-04-05       3
12              2   medications     No 2010-12-15    2012-04-05       3
13              2  transferring    Yes 2009-10-10    2012-04-05       5
14              2     preparing     No 2009-10-10    2012-04-05       5
15              2   medications     No 2009-10-10    2012-04-05       5
16              3   medications     No 2008-10-10    2010-04-07       3

另外,我不会使用pd.date_range因为它似乎不像你想要的那样,但我可能是错的。

编辑:要删除 DiagnosisDate 早于 Answerdate 的情况,一旦您创建了 6 个月的列,只需执行以下操作data = data[data['6months'] > 0]因为在这种情况下该值将为负数或零

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

pandas 六个月的日期范围 的相关文章

随机推荐

  • 如何让 Emacs 自动缩进我的 C 代码?

    我刚刚开始熟悉 emacs 但我对它在我按回车键时不缩进的趋势感到沮丧 我知道如果我按 C j 就会执行此操作 但我无法养成这种习惯 我就是不能 我需要按回车键 而且我讨厌每次都重新切换 我进入选项并找到 C 模式挂钩和 C 模式挂钩等 他
  • 如何将字符串转换为 CLLocationDegrees Swift 2

    我正在尝试转换从 Firebase 检索的字符串并将其添加为 Google 地图上的多个注释 不幸的是 每当我的应用程序执行当前代码时就会崩溃 ref FIRDatabase database reference ref child Loc
  • 如何在 Scala 中使用 JUnit ExpectedException?

    我希望能够使用 JUnit 4 7预期异常 Rule http kentbeck github com junit javadoc latest org junit rules ExpectedException html在斯卡拉 然而 它
  • 无法在 iOS 上将 CIImage 保存到文件而不发生内存泄漏

    下面的代码片段保存了一个CIImage到磁盘使用UIImage void applicationWillResignActive UIApplication application NSString filename Test png UI
  • HibernateTemplate 可以与 Envers 一起使用吗?如果是这样,怎么办?

    我正在尝试在一个也使用 Hibernate 和 Spring 的项目上使用 Envers 我非常欣赏 HibernateTemplate 提供的代码减少功能 我在 JPA 下配置了 Envers 经过一些调整后 我能够通过 EnversHi
  • Shell_exec 与 git pull ?

    我正在建立一个 github 帐户 与一些朋友一起开发一个小项目 我希望我的家用机器能够通过 php 执行 git pull 这样我们只需调用这个小 php 文件即可使机器保持最新状态 截至目前 这工作完美 我得到了输出 我在正确的目录中
  • 如何将我的 Kivy 客户端连接到服务器(TCP、套接字)

    因此 作为我的项目 2D 多人纸牌游戏 的一部分 我已经弄清楚如何在线托管和运行服务器脚本 我的计划是让两个单独的 kivy 客户端连接到服务器 这只是一个带有命令的脚本 但是我对操作顺序有些困惑 因为我think客户端连接可能与消息循环发
  • 查找 Javascript 对象中属性的交集

    大家好 我想我有以下两个对象 var obj1 one 232 two 3123 three 3232 var obj2 one 323 three 3444 seven 32 我正在尝试编写一个函数 该函数将返回两个对象中的属性 假设我始
  • 使 ViewGroup 在 Android 上可点击

    我有一个 ViewGroup LinearLayout 其中包含几个 TextView 和一个 ImageView 我想让整个组都可以点击 我尝试过这样的事情 viewGroup setOnClickListener new OnClick
  • HTML 5 游戏是否使用 Canvas 和 Javascript?这种情况下如何防止作弊呢?

    HTML 5 游戏是否使用 Canvas 和 Javascript 这种情况下如何防止作弊呢 例如 如果用户使用 GreaseMonkey 或某些工具来更改脚本 使其每次只向服务器报告完美的游戏分数 该怎么办 我会用我自己的问题来回答你的问
  • 如何使用gdb来探索堆栈/堆?

    谁能给我一个快速概述 给我指出一种检查 C 程序堆栈 和堆 的方法的文档 我认为这应该用 GDB 来完成 但如果有其他更直接的替代方案 那么也应该没问题 Thanks 您可以使用 x 命令转储原始内存 因此 如果您想查看堆栈或堆的位 请尝试
  • gcc 通过 homebrew 没有 --without-multilib 选项

    我想在 Python 3 5 中安装 xgboost 这个需要gcc支持 fopenmp选项 默认gcc不支持 所以我正在使用 brew install gcc without multilib 但我得到Warning gcc this f
  • 将本地文件的内容读取到 Rails 中的变量中

    我想做的就是从本地文件中获取所有内容并将其存储在变量中 如何 File read icon full filename each l r l 只给我一部分 在 PHP 中 我刚刚使用file get contents data File r
  • 硬币兑换 DP 解决方案以跟踪硬币

    尝试为一般的硬币找零问题编写一个 DP 解决方案 该解决方案还可以跟踪使用了哪些硬币 到目前为止 我已经可以为我提供所需的最低数量的硬币 但无法弄清楚如何获取使用了哪些硬币以及使用了多少次 如果使用硬币 我尝试设置另一个带有值的表 布尔值
  • Javascript 域模型对象约定

    如果我必须在 C 中创建域模型对象 我可能会这样做 public class Person Public string Name get set Public string Gender get set Public int Age get
  • 使用文本框自动滚动到底部

    我有一个由 ms access 制作的 mdb 文件 它有一个表单 表单内部有一个大文本框 制作此文本框的目的是通过在文本框中添加消息来显示某些工作的进度 txtStatus value txtStatus value Doing some
  • 如何通过 COM 公开 .netstandard2.0 库以便在 VB6 中使用?

    我有一个 dotnet 核心库 一个框架 4 7 2 库和一个 vb6 应用程序 我想编写一个公共库供他们所有人访问 因此选择 netstandard2 0 我尝试了 netstandard2 0 库和 vb6 之间的 4 7 2 框架包装
  • Grails:两个域对象之间的多重关系

    我正在尝试在 Grails 中的两个域类之间实现两种不同类型的关系 考虑以下 我有两个域类 一个作者类和一个书籍类 其中一个作者拥有很多书籍 class Author String name class Book String title
  • 在 SQL Management studio 中更改 CommandTimeout

    如何更改 SQL Management Studio 中的 CommandTimeout 如果您在使用表设计器时遇到超时 请更改工具 gt 选项 gt 设计器 gt 表和数据库设计器下的 事务超时时间 值 这将消除此消息 超时已到 操作完成
  • pandas 六个月的日期范围

    所以 这是我的数据框 PatientNumber QT Answer Answerdate DiagnosisDate 1 1 transferring No 2017 03 03 2018 05 03 2 1 preparing food