该图是输出的结合后的C表,不知道为什么只包含一个病人ID,而且想要变成横向排列应该怎么做(关键词-table)


import pandas as pd
import datetime

# 读取表A和表B的数据
table_a = pd.read_excel("C:/Users/汝汝/Desktop/体征/2012年体征(整理).xlsx")
table_b = pd.read_excel("C:/Users/汝汝/Desktop/基本信息/2012年住院.xlsx")

# 按病人ID对表A进行分组,并按时间排序
table_a['检查日期'] = pd.to_datetime(table_a['检查日期'])
df_a_grouped = table_a.sort_values(by='检查日期').groupby('PATIENT_ID')

# 创建空的DataFrame用于保存合并结果
combined_data = pd.DataFrame()

# 遍历表B的数据
for index, row in table_b.iterrows():
    # 在表A中找到其病人ID对应的分组,并进行二分查找,找到表A中最靠近当前行数据时间的体征
    df_a_current = df_a_grouped.get_group(row['PATIENT_ID'])  # 表A数据子集
    df_a_current = df_a_current.reset_index(drop=True)
    diagnosis_date_str = row['诊断日期'].strftime('%Y-%m-%d %H:%M:%S')
    df_a_closest = df_a_current.iloc[
        (df_a_current['检查日期'] - datetime.datetime.strptime(diagnosis_date_str, '%Y-%m-%d %H:%M:%S')).abs().argsort()[0]
    ]
    # 将表B中的数据和找到的表A中的体征进行合并,并追加到结果DataFrame中
    combined_row = pd.concat([row, df_a_closest.to_frame().T], axis=1)
    combined_data = combined_data.append(combined_row, ignore_index=True)
# 打印合并后的结果
print(combined_data)

# 将DataFrame输出为Excel文件
combined_data.to_excel('匹配数据.xlsx', index=False)

img


该图是输出的结合后的C表,不知道为什么只包含一个病人ID,而且想要变成横向排列应该怎么做。
谢谢大家

如果您想将一个病人的C表从纵向排列变为横向排列,可以使用 Pandas 库中的 transpose() 函数。

首先,将数据读入 DataFrame 中。假设数据已经保存在名为 df 的 DataFrame 中,则可以按如下方式进行转置:

df_T = df.transpose()

这将生成一个新的 DataFrame 对象 df_T,其中病人 ID 成为行索引,而 C 表的组成部分成为列索引。如果您想对该 DataFrame 进行修改并覆盖原始 DataFrame,则可以使用 inplace=True 参数:

df.transpose(inplace=True)

或者,您也可以通过重新分配变量来达到相同的效果:

df = df.transpose()

在转置后,您可以使用 Pandas 中提供的各种函数和方法来进一步处理和分析数据,例如,您可以使用 sort_values() 函数按日期对 C 表进行排序:

df_T.sort_values(by='date', inplace=True)

此函数默认按列名排序,因此我们需要使用 by 参数指定 date 列作为排序依据。再次指定 inplace=True 参数可在原始 DataFrame 上进行修改。