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