我有一个长格式的pandas数据帧(10M +行),其中每行包括医院访问和相应的诊断,可以为任何患者进行多次访问。
我想创建一个新专栏,总结所有 以前为该患者颁发的唯一 诊断。
可以直接创建一个新列,其中包含一个列表,该列表总结了随时获得的所有诊断,但这不适合我。
What I tried so far:
df.groupby( ["Patient_ID"] )["Diagnosis"].unique().to_frame(name = "all_diagnoses").reset_index()
Patient_ID all_diagnoses
2 [R104]
3 [O820, K429]
4 [R319, R339, N409, C619]
5 [J189, K578]
10 [C619, S202, R410]
Desired output:
Visit_ID Patient_ID ARRIVAL Diagnosis Newcol
52591 2 2/1/12 14:30 R104 [R104]
78131 3 4/26/12 7:00 O820 [O820]
78132 3 3/7/13 8:00 K429 [O820, K429]
61204 4 1/4/13 0:05 R319 [R319]
61202 4 1/10/13 15:00 R339 [R319, R339]
61205 4 4/23/13 10:00 N409 [R319, R339, N409]
61203 4 5/9/13 10:30 R319 [R319, R339, N409]
61206 4 5/30/13 3:40 C619 [R319, R339, N409, C619]
54263 5 3/28/12 23:10 J189 [J189]
54262 5 4/7/12 23:55 K578 [J189, K578]
111804 10 1/10/11 9:00 C619 [C619]
111803 10 5/16/12 20:00 S202 [C619, S202]
111805 10 7/18/12 14:30 R410 [C619, S202, R410]
82785 10 5/17/13 17:50 R410 [C619, S202, R410]
68737 10 11/28/13 10:30 R410 [C619, S202, R410]
This is not what I want:
Visit_ID Patient_ID ARRIVAL Diagnosis Newcol
52591 2 2/1/12 14:30 R104 [R104]
78131 3 4/26/12 7:00 O820 [O820, K429]
78132 3 3/7/13 8:00 K429 [O820, K429]
61204 4 1/4/13 0:05 R319 [R319, R339, N409, C619]
61202 4 1/10/13 15:00 R339 [R319, R339, N409, C619]
61205 4 4/23/13 10:00 N409 [R319, R339, N409, C619]
61203 4 5/9/13 10:30 R319 [R319, R339, N409, C619]
61206 4 5/30/13 3:40 C619 [R319, R339, N409, C619]
54263 5 3/28/12 23:10 J189 [J189, K578]
54262 5 4/7/12 23:55 K578 [J189, K578]
111804 10 1/10/11 9:00 C619 [C619, S202, R410]
111803 10 5/16/12 20:00 S202 [C619, S202, R410]
111805 10 7/18/12 14:30 R410 [C619, S202, R410]
82785 10 5/17/13 17:50 R410 [C619, S202, R410]
68737 10 11/28/13 10:30 R410 [C619, S202, R410]
答案 0 :(得分:1)
这应该可以解决问题
df2 =df.groupby('Patient_ID')['Diagnosis'].unique().to_frame()
df.merge(df2, how = 'left', left_on = 'Patient_ID', right_index = True )
我们执行groupby,然后在数据框中转换系列。
df2 =df.groupby('Patient_ID')['Diagnosis'].unique().to_frame()
然后我们将原始数据帧与这个新数据帧合并;
df.merge(df2, how = 'left', left_on = 'Patient_ID', right_index = True )
how = left
表示我们将依赖左侧数据框的键(左侧数据帧的' Patient_ID')。请记住,我们添加到原始数据帧,因此我们希望此数据帧(左)为参考点。
left_on
是我们想要用作合并左数据框的索引键的列
right_index
因为我们正在使用正确数据框的索引(按数据框分组)