zhangyiru1997 2023-05-27 14:02 采纳率: 50%
浏览 31
已结题

关于#python#的问题:医疗数据匹配问题从表A中找到与表B诊断时间最接近的日期的体征,同一列为病人ID

我有两张表格A和B,它们分别包含病人体征和诊断记录。我需要找到表A中与表B中每个诊断时间最接近的体征,并将它们结合到一起。同时,它们都有一个共同的病人ID列。请问,在Python中该如何实现这个功能?是否有一些优化的解决方案呢?非常感谢!

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-27 16:46
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7607981
    • 除此之外, 这篇博客: Python汇总学习篇中的 39.10将数据第1列都加上10,第2列乘以2倍,通过索引获取列的值和更改列的值,显示b列值大于11的值,修改a列和b列值 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • import pandas as pd
      
      df = pd.read_excel("234.xlsx",sheet_name=2)
      print(df)
      """
      #输出:
         a   b
      0  1  10
      1  2  20
      """
      "a":lambda x:x.strip(), #去除列名a左右的空格
      
      #将数据第1列都加上10,第2列乘以2倍
      df = pd.read_excel("234.xlsx",sheet_name=2,
                         converters={
                             "a":lambda x:x+10, #a列加10
                             "b":lambda x:x*2,  #b列乘以2倍
                         })
      print(df)
      """
      #输出:
          a   b
      0  11  20
      1  12  40
      """
      
      import pandas as pd
      
      #通过索引获取列的值和更改列的值
      #还可以写成:df[(df["b"]>2) & (df["b"]<6)] 且关系
      #还可以写成:df[(df["b"]==2) | (df["b"]==8)] 或关系
      #还可以写成:df[~(df["b"]==2)] 不等于关系
      df = pd.read_excel("234.xlsx",sheet_name=2)
      print(df)
      """
      #输出:
         a   b
      0  1  10
      1  2  20
      """
      #判断b列值是否大于11
      print(df["b"]>11)
      """
      #输出:
      0    False
      1     True
      Name: b, dtype: bool
      """
      #显示b列值大于11的值
      print(df[df["b"]>11])
      """
      #输出:
         a   b
      1  2  20
      """
      #只显示b列的数值
      print(df[["b"]])
      """
      #输出:
         b
      0  10
      1  20
      """
      #只显示第1行,也就是True的那一行,这种带True,False的取值方式叫掩码取值
      print(df[[True,False]])
      """
      #输出:
         a   b
      0  1  10
      """
      #获取b列的数值,将b列值更改为101,201
      df["b"] = [101,201]
      print(df)
      """
      #输出:
         a    b
      0  1  101
      1  2  201
      """
      #修改a列和b列值
      df[["a","b"]] = [[101,201],[202,203]]
      print(df)
      """
      #输出:
          a    b
      0  101  201
      1  202  203
      """
      
    • 以下回答由chatgpt基于相关博客总结生成:

      针对医疗数据匹配问题,可以通过以下步骤解决:

      1. 首先,读取表A和表B的数据,并将表A按照病人ID进行分组,将每个分组内的数据按照时间排序。

      2. 接着,遍历表B的数据,对于每一条数据,在表A中找到其病人ID对应的分组,并进行二分查找(或者其他高效搜索算法),找到表A中最靠近当前行数据时间的体征。

      3. 将表B中的数据和找到的表A中的体征进行结合。

      具体实现代码如下:

      import pandas as pd
      import datetime
      
      # 读取表A和表B的数据
      df_a = pd.read_csv('table_a.csv')
      df_b = pd.read_csv('table_b.csv')
      
      # 将表A按照病人ID进行分组,将每个分组内的数据按照时间排序
      df_a['time'] = pd.to_datetime(df_a['time'])
      df_a_grouped = df_a.sort_values(by=['time']).groupby(['patient_id'])
      
      # 遍历表B的数据
      for index, row in df_b.iterrows():
          # 在表A中找到其病人ID对应的分组,并进行二分查找,找到表A中最靠近当前行数据时间的体征
          df_a_current = df_a_grouped.get_group(row['patient_id'])
          df_a_closest = df_a_current.iloc[(df_a_current['time']-datetime.datetime.strptime(row['diagnosis_time'], '%Y-%m-%d %H:%M:%S')).abs().argsort()[0]]
      
          # 将表B中的数据和找到的表A中的体征进行结合
          df_b.loc[index, 'closest_feature_value'] = df_a_closest['feature_value']
      
      # 输出处理后的表B
      print(df_b)
      

      为了让chatgpt更好地理解问题,可以在提问时使用更加具体的术语和描述,比如:

      我有两张表格A和B,它们分别包含病人体征和诊断记录。我需要找到表A中与表B中每个诊断时间最接近的体征,并将它们结合到一起。同时,它们都有一个共同的病人ID列。请问,在Python中该如何实现这个功能?是否有一些优化的解决方案呢?非常感谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 修改了问题 5月28日
  • 创建了问题 5月27日

悬赏问题

  • ¥100 用数字代替ip主机号断与旋转链接号段
  • ¥20 学校内手机热点不能使用
  • ¥15 qwen模型微调训练时grad_norm为0.0或为nan
  • ¥15 若依- Spring cloud-plus集成阿里云schedulerX再控制台应用管理找不到实例
  • ¥15 用vs2022 fortran调试只无法查看数组的值,显示发生未指定的错误
  • ¥15 gge梦幻西游的地图制作
  • ¥15 对计算机的学习没有方向
  • ¥15 用VBA抓取淘宝的发票号码和下载发票pdf遇到的问题
  • ¥20 java excel导出有什么解决方案
  • ¥15 关于#r语言#的问题:并不是原CSV文件中的数据