如何将含患者ID与就诊次数的字典转换为键值均为行的DataFrame
解决方法:将患者就诊字典转换为行式DataFrame
嘿,我懂你要的效果啦——就是把每个患者的3次就诊记录拆成单独的行,对吧?你之前用pd.DataFrame.from_dict(dictionary, orient='index')得到的应该是每行一个患者,列对应1、2、3次就诊,但这显然不是你想要的结构。下面给你两种简单的实现方式:
方法1:列表推导式手动拆分数据
这种方法直观易懂,通过遍历字典的键值对,把每个患者ID和对应的就诊次数逐一配对,再转成DataFrame:
import pandas as pd patients = ['Patient01', 'patient02', 'patient03'] visits = [1,2,3] dictionary = {k:visits for k in patients} # 生成(患者ID, 就诊次数)的元组列表 data_rows = [(patient_id, visit_num) for patient_id, visit_list in dictionary.items() for visit_num in visit_list] # 转换为DataFrame并指定列名 df = pd.DataFrame(data_rows, columns=['患者ID', '就诊次数']) print(df)
方法2:用explode()快速拆分列表(更简洁)
Pandas的explode()方法专门用来把单元格里的列表拆成多行,搭配Series使用会非常高效:
import pandas as pd patients = ['Patient01', 'patient02', 'patient03'] visits = [1,2,3] dictionary = {k:visits for k in patients} # 先把字典转成Series,再拆分列表,最后整理列名 df = pd.Series(dictionary).explode().reset_index() df.columns = ['患者ID', '就诊次数'] print(df)
两种方法都会得到你想要的结果:
患者ID 就诊次数 0 Patient01 1 1 Patient01 2 2 Patient01 3 3 patient02 1 4 patient02 2 5 patient02 3 6 patient03 1 7 patient03 2 8 patient03 3
内容的提问来源于stack exchange,提问作者Karen Liu
相关产品推荐
相关产品推荐

