在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。
例如:
在列'代码'
s = df['code'].value_counts().ge(3)
df = df[df['code'].isin(s[s].index)]
答案 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)
您应该能够使用groupby
和nunique()
函数来获得每次诊断的患者数量。这应该会给你你需要的结果:
df[['pid', 'code']].groupby(['code']).nunique()