从熊猫数据框中过滤数据

时间:2018-06-27 21:51:26

标签: python pandas dataframe

背景:我正在尝试使用csv文件中的数据来提出问题并根据数据得出结论。数据是来自巴西诊所的患者就诊日志,包括其他患者数据以及患者是否未出现。我选择检查患者年龄与未出现数据之间的相关性。

问题:给定就诊人数,患者ID,年龄和未显示数据,我如何编制与每个唯一患者ID相关的年龄数组(以便我可以评估均值前往诊所的唯一患者总数的年龄。

我的代码:

# data set of no shows at a clinic in Brazil
noshow_data = pd.read_csv('noshowappointments-kagglev2-may-2016.csv')

noshow_df = pd.DataFrame(noshow_data)

这是代码的开头,给出了csv整个数据帧的开头

# Next I construct a dataframe with only the data I'm interested in:

ptid = noshow_df['PatientId']
ages = noshow_df['Age']
noshow = noshow_df['No-show']
ptid_ages_noshow = pd.DataFrame({'PatientId' : pt_id, 'Ages' : ages, 
                                 'No_show' : noshow})

ptid_ages_noshow

在这里,我对数据进行了排序,以显示唯一患者的多次就诊

# Now, I know how to determine the total number of unique patients:

# total number of unique patients
num_unique_pts = noshow_df.PatientId.unique()
len(num_unique_pts)

如果我想查找所有就诊过程中所​​有患者的平均年龄,我将使用:

# mean age of all vists
ages = noshow_data['Age']
ages.mean()

所以我的问题是,我怎么能找到所有独特患者的平均年龄?

2 个答案:

答案 0 :(得分:1)

您可以只使用pandas中可用的groupby函数,而不必担心相关列:

ptid_ages_noshow[['PatientId','Ages']].groupby('PatientId').mean()

答案 1 :(得分:0)

因此,您只想为每个患者保留一个约会进行计算?这样做是这样的:

noshow_df.drop_duplicates('PatientId')['Age'].mean()

请记住,人们的年龄会随着时间而变化。您需要确定如何处理此问题。