在pandas中,如何在数据帧中显示最常见的诊断,但每个患者只计算1次相同诊断

时间:2018-03-08 03:20:13

标签: python pandas dataframe

在pandas和python中:

我有一个包含健康记录的大型数据集,患者有诊断记录。 如何显示最常见的诊断,但每位患者仅计算1次相同诊断?

示例(' pid'是患者ID。'代码'是诊断代码):

在:

pid  code
1    A
1    B
1    A
1    A
2    A
2    A
2    B
2    A
3    B
3    C
3    D
4    A
4    A
4    A
4    B

OUT:

B    4
A    3
C    1
D    1


如果可能,我希望能够使用.isin .index。
例如:
在列'代码'

中删除频率计数少于3的所有行
s = df['code'].value_counts().ge(3)
df = df[df['code'].isin(s[s].index)]

3 个答案:

答案 0 :(得分:2)

您可以使用groupby + nunique:

df.groupby(by='code').pid.nunique().sort_values(ascending=False)
Out[60]: 
code
B    4
A    3
D    1
C    1
Name: pid, dtype: int64

要删除列'代码'

中频率计数少于3的所有行
df.groupby(by='code').filter(lambda x: x.pid.nunique()>=3)
Out[55]: 
    pid code
0     1    A
1     1    B
2     1    A
3     1    A
4     2    A
5     2    A
6     2    B
7     2    A
8     3    B
11    4    A
12    4    A
13    4    A
14    4    B

答案 1 :(得分:2)

您提到value_counts

    df.groupby('code').pid.value_counts().count(level=0)
    Out[42]: 
    code
    A    3
    B    4
    C    1
    D    1
    Name: pid, dtype: int64

答案 2 :(得分:1)

您应该能够使用groupbynunique()函数来获得每次诊断的患者数量。这应该会给你你需要的结果:

df[['pid', 'code']].groupby(['code']).nunique()