我正在试图想象一些数据,但我对这个主题并不是很有经验,而且我很难找到最好的海湾来获得我正在寻找的东西。我四处寻找并发现了类似的问题,但没有任何东西可以回答我想要的东西,所以希望我不会重复一个常见的问题。
无论如何,我有一个DataFrame,其中包含patient_id
的列(以及其他列,但这是相关的。例如:
patient_id other_stuff
0 000001 ...
1 000001 ...
2 000001 ...
3 000002 ...
4 000003 ...
5 000003 ...
6 000004 ...
etc
每行代表患者所具有的特定情节。我想绘制一个分布,其中x轴是患者的发作次数,y轴是具有所述发作次数的患者数。例如,基于以上所述,有一个患者具有三个发作,一个患者具有两个发作,两个患者具有一个发作,即x = [1, 2, 3], y = [2, 1, 1]
。目前,我执行以下操作:
episode_count_distribution = (
patients.patient_id
.value_counts() # the number of rows for each patient_id (i.e. episodes per patient)
.value_counts() # the number of patients for each possible row count above (i.e. distribution of episodes per patient)
.sort_index()
)
episode_count_distribution.plot()
这种方法做到了我想要的,但让我觉得有点不透明,难以理解,所以我想知道是否有更好的方法。
答案 0 :(得分:2)
您可能正在寻找类似
的内容df.procedure_id.groupby(df.patient_id).nunique().hist();
说明:
df.procedure_id.groupby(df.patient_id).nunique()
查找每位患者的独特程序数。
hist()
绘制直方图。
示例强>
df = pd.DataFrame({'procedure_id': [3, 2, 3, 2, 4, 1, 2, 3], 'patient_id': [1, 2, 3, 2, 1, 2, 3, 2]})
df.procedure_id.groupby(df.patient_id).nunique().hist();
xlabel('num patients');
ylabel('num treatments');