Python 在pandas中,如何在dataframe中显示最频繁的诊断,但仅统计每个患者相同诊断的1次出现
在熊猫和蟒蛇中: 我有一个很大的健康记录数据集,病人有诊断记录。 如何显示最常见的诊断,但仅统计每个患者发生1次相同诊断?Python 在pandas中,如何在dataframe中显示最频繁的诊断,但仅统计每个患者相同诊断的1次出现,python,pandas,dataframe,Python,Pandas,Dataframe,在熊猫和蟒蛇中: 我有一个很大的健康记录数据集,病人有诊断记录。 如何显示最常见的诊断,但仅统计每个患者发生1次相同诊断? 示例(“pid”是患者id。“代码”是诊断代码): 在: 输出: 如果可能的话,我希望能够使用.isin.index。 示例: 删除“代码”列中频率计数小于3的所有行 s = df['code'].value_counts().ge(3) df = df[df['code'].isin(s[s].index)] df.groupby(by='code').filt
示例(“pid”是患者id。“代码”是诊断代码): 在: 输出:
如果可能的话,我希望能够使用.isin.index。
示例:
删除“代码”列中频率计数小于3的所有行
s = df['code'].value_counts().ge(3)
df = df[df['code'].isin(s[s].index)]
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
您可以使用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的所有行
s = df['code'].value_counts().ge(3)
df = df[df['code'].isin(s[s].index)]
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
您应该能够使用
groupby
和nunique()
函数来获得每次诊断的患者的不同计数。这将为您提供所需的结果:
df[['pid', 'code']].groupby(['code']).nunique()
既然你提到了
value\u计数
df.groupby('code').pid.value_counts().count(level=0)
Out[42]:
code
A 3
B 4
C 1
D 1
Name: pid, dtype: int64
谢谢,但是如何按降序排列呢?我想我论文中的一半代码最终将基于你的答案;)