基于行中的值的“开始”和“结束”日期

2024-01-16

我有一个可以找到的输入数据示例here https://github.com/veronique-ka/tests/blob/master/input.xlsx

input enter image description here

我需要根据每行中的数据添加两列:“开始日期”和“结束日期”:

  • 开始日期 - 当所有先前的单元格为空且日期从 yyyymm01 开始时
  • 结束日期 - 时间all后续为空:
  • 如果所有后续内容都不为空,则添加类似“终身”日期的内容:“99991231”
  • 否则 - yyyymm30 或 31 或 28(取决于月份)

输出示例:

我将不胜感激任何想法:) 谢谢


使用 pd.melt()
按 ID 和日期对数据进行排序

import pandas as pd
import numpy as np
from pandas.tseries.offsets import MonthEnd

df = pd.read_excel("input.xlsx")
max_date = df.columns[-1]

res = pd.melt(df, id_vars=['id', 'region'], value_vars=df.columns[2:])
res.dropna(subset=['value'], inplace=True)

res.sort_values(by=['id', 'variable'], ascending=[True, True], inplace=True)

minimum_date = res.drop_duplicates(subset=['id'], keep='first')
maximum_date = res.drop_duplicates(subset=['id'], keep='last')

minimum_date.rename(columns={'variable': 'start_date'}, inplace=True)
maximum_date.rename(columns={'variable': 'end_date'}, inplace=True)

df = pd.merge(df, minimum_date[['id', 'start_date']], on=['id'], how='left')
df = pd.merge(df, maximum_date[['id', 'end_date']], on=['id'], how='left')

df['end_date'] = np.where(df['end_date']==max_date,
                          "99991231",df['end_date'])

df['start_date'] = (pd.to_datetime(df['start_date'],format="%Y%m",errors='coerce') +MonthEnd(1)).astype(str)
df['end_date'] = (pd.to_datetime(df['end_date'],format="%Y%m",errors='coerce') +MonthEnd(1)).astype(str)

df['end_date'] = np.where(df['end_date']=='NaT',
                          "99991231",df['end_date'])
print(df)

      id  region  201801  201802  ...  201905  201906  start_date    end_date
0  100001     628     NaN     NaN  ...    26.0    23.0  2018-09-30    99991231
1  100002    1149    27.0    24.0  ...    26.0    24.0  2018-01-31    99991231
2  100003    1290    26.0    26.0  ...    27.0    25.0  2018-01-31    99991231
3  100004     955    25.0    26.0  ...     NaN     NaN  2018-01-31  2018-12-31
4  100005    1397    15.0    25.0  ...     NaN     NaN  2018-01-31  2018-11-30
5  100006    1397    15.0    25.0  ...     NaN     NaN  2018-01-31  2019-02-28

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

基于行中的值的“开始”和“结束”日期 的相关文章

随机推荐

  • 尝试使用清单中的以下图标时出错

    运行反应应用程序时 我的控制台总是显示此错误消息 gt Error while trying to use the following icon from the Manifest gt http localhost 3000 favico
  • 在 Cordova 和 Ionic 中检测屏幕关闭/打开

    我想检测手机何时锁定和解锁 计划是在手机解锁时显示 非广告 弹出窗口 到目前为止 Cordova 似乎只支持暂停和恢复事件 这不会让我获得我需要的功能 本机 Android 支持屏幕开 关和用户呈现事件 是否可以使用这些事件 如果不能 是否
  • R 中的聚合数据

    我正在寻找一个关于如何使用的简单示例aggregate并计算 R 中的平均值 比如说 我有以下数据框 A B 100 85 200 95 300 110 400 105 我想计算某些范围的平均值 结果如下 RANGE MEAN 100 20
  • 从 Windows 通过 Cygwin 运行 Git

    我最近开始将 Cygwin 用于其他目的 并且已经在我的 PC 上安装了 Git 我知道我可以运行可执行文件并将 Git 安装到 Cygwin 中 但因为我已经安装了它 我希望 Cygwin 只使用我的 Windows 安装 我尝试过研究如
  • 如何更改 ATOM 控制台中的控制台字体大小 [电子邮件受保护]

    I am using ATOM for all my scripting There is a package named Script where you can run your script from within ATOM by p
  • MSTest 在错误位置查找 DLL

    我正在运行一个测试工具 但由于类型未解析而无法运行 更具体地说 是错误绑定上的 SerializationException 我使用fuslogvw来追踪它在哪里寻找DLL 但没有找到它 我很困惑为什么它在它所在的位置寻找 Pre bind
  • 适用于 Google 云端硬盘的 Android API?

    目前发布的 API 似乎主要针对 Chrome 商店应用程序 是否会有适用于 Android 的 API 或者是否可以使用现有的 API 例如 Google 文档列表数据 如果是这样 应该使用哪个 URL 来列出 访问文件 编辑 随着文档列
  • Item PropertyChanged 不适用于 observableCollection。为什么?

    我到处寻找解决方案 但似乎没有深入了解 就像网上的许多帖子一样 我似乎没有让我的 itemPropertyChanged 工作 编辑集合中的项目时它不会触发 为什么 有点长 但这是我整理的一个例子 我有一个客户 ViewModel 其中包含
  • 如何以编程方式“打开”Material-UI Select 字段?

    选择字段可以在这里找到 在 Material UI 演示中 http www material ui com components select field 它的方法似乎是从菜单 弹出窗口类继承的 但我无法弄清楚如何在 onFocus 事件
  • while 循环的 Python 枚举

    Python 有一种优雅的方式自动生成计数器变量for循环 enumerate功能 这节省了初始化和递增计数器变量的需要 计数器变量也很丑陋 因为一旦循环完成它们通常就没用了 但它们的作用域不是循环的作用域 因此它们不需要占用命名空间 尽管
  • 如何将指定字段中的隐私政策添加到Chrome扩展程序中?

    是否有任何密钥或属性或其他方式可以将指定字段中的附加信息添加到 Chrome 扩展程序 Note 我们正在尝试在 Chrome 扩展程序下载 UI 中添加附加信息字段作为开发者隐私链接 但无法添加字段 您能否帮助我们了解如何在指定字段中添加
  • Spring自定义AuthenticationFailureHandler

    我已经尝试了一整天 让我的自定义身份验证失败处理程序与 Spring 3 1 3 一起使用 我认为配置正确
  • 使用 HTML 表单作为 powershell 的 GUI

    我有一个 powershell 脚本 我想使用 html 表单运行它 我所拥有的只是一些表单字段和一个按钮 当我运行 powershell 脚本时 它会打开一个新的 ie 窗口 然后导航到包含表单的正确页面 如何收集用户单击按钮后在表单中填
  • Delphi/Pascal 有静态代码分析工具吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Delphi Pascal 有静态代码分析工具吗 我见过很多 C 和 NET 的选项 但没有看到 De
  • java中如何将字符串转换为比特流

    如何将字符串转换为位 0 和 1 的流 我做了什么我采取了一个字符串 然后将其转换为一个字符数组 然后我使用了方法 称为 forDigit char int 但它没有给我作为 0 和 1 流的字符 你能帮忙吗 另外我怎样才能从位到字符进行相
  • 如何使用selenium获取td元素的文本?

    我有一个 html 表格 我需要用硒获取 td 元素的文本 html结构 table tbody tr td b Success b You have transferred 1 000 00 USD to DIST2 Your balan
  • 从 iPhone 发送 UDP 数据包

    有人有关于从 iPhone SDK 发送 UDP 数据包的好教程吗 EDIT 事实上 做到这一点真的很容易 RTFM 包含 AsyncUdpSocket 后 只需在标头中添加以下内容 AsyncUdpSocket socket 主要是 NS
  • Python Rich 表中的列表列表

    鉴于以下内容 我怎样才能将动物 年龄和性别放入每个表格单元格中 目前 所有数据最终都存储在一个单元格中 谢谢 from rich console import Console from rich table import Table lis
  • Appium Send keys() 函数发送中文字符作为英文字符串的一部分

    使用appium时send keys 函数在文本字段中发送名称 除了名称之外 文本字段中还会出现一些随机的汉字 我们在能力中使用 capabilities setCapability unicodeKeyboard true 甚至认为我们无
  • 基于行中的值的“开始”和“结束”日期

    我有一个可以找到的输入数据示例here https github com veronique ka tests blob master input xlsx input 我需要根据每行中的数据添加两列 开始日期 和 结束日期 开始日期 当所