基于subject_id与hour_id列合并两个患者生理指标CSV文件的Pandas技术问题
解决Pandas合并两个CSV文件(按患者+小时匹配)的问题
你的问题根源在于用错了合并方式:pd.concat(axis=1)只是简单把两个DataFrame按列横向拼接,它不会根据subject_id和hour_id的实际值去匹配对应数据,再加上keys参数的用法不符合你的需求,才导致出现重复列、结果不符合预期的情况。
正确的合并方案:使用pd.merge()
我们需要基于subject_id和hour_id这两个共同标识,对两个数据集做精准匹配合并,具体代码如下:
import pandas as pd # 读取两个CSV文件,请替换成你的实际文件路径 df_blood_pressure = pd.read_csv('D:\\你的血压文件路径.csv', low_memory=False, error_bad_lines=False) df_heart_rate = pd.read_csv('D:\\你的心率文件路径.csv', low_memory=False, error_bad_lines=False) # 基于subject_id和hour_id进行匹配合并 merged_df = pd.merge(df_blood_pressure, df_heart_rate, on=['subject_id', 'hour_id'], how='inner') # 输出合并结果 print(merged_df)
关键参数解释
on=['subject_id', 'hour_id']:指定用这两列作为匹配的"键",确保只有当两个文件中这两列的值完全一致时,才会把对应行的数据合并到一起。how='inner':表示只保留两个文件中都存在的匹配行(完全符合你要的"同一患者同一测量小时"的需求)。如果需要保留某一个文件的所有行,可以换成left/right/outer,但你的场景用inner最合适。
为什么concat不适合你的场景?
pd.concat(axis=1)是严格按行索引来拼接列的,它不会检查subject_id和hour_id的实际值是否匹配——只是默认两个DataFrame的行顺序完全一致,直接把第二张表的列贴到第一张表右边。如果你的数据行顺序万一不一致,结果会完全错误;哪怕顺序对,也会出现重复的列(比如你输出里的重复hour_id),这显然不是你想要的逻辑匹配合并。
内容的提问来源于stack exchange,提问作者Nora Mahmoud
相关产品推荐
相关产品推荐

