Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中,如何在dataframe中显示最频繁的诊断,但仅统计每个患者相同诊断的1次出现_Python_Pandas_Dataframe - Fatal编程技术网

Python 在pandas中,如何在dataframe中显示最频繁的诊断,但仅统计每个患者相同诊断的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

在熊猫和蟒蛇中:

我有一个很大的健康记录数据集,病人有诊断记录。 如何显示最常见的诊断,但仅统计每个患者发生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').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

谢谢,但是如何按降序排列呢?我想我论文中的一半代码最终将基于你的答案;)