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

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

img

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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中该如何实现这个功能?是否有一些优化的解决方案呢?非常感谢!