因此,这个数据集有200万患者记录。我被要求将每个变量分成两部分,并且该部分已完成,但任何患者都可以有多个记录,因此我必须由患者对其进行分组。当我执行此操作时,我会丢失数据;任何想法为什么?这在每个领域都不会发生:
我正在添加一个示例数据帧的图像来执行groupby(' npaciente),然后您可以看到,对于每个列中的valu_计数,它不会返回complicacionescronicas列中的任何内容
答案 0 :(得分:2)
当你进行聚合(groupby
+ max
)时,你正在丢失数据 - 这是正常的。
演示:
In [5]: df = pd.DataFrame(np.random.randint(0,5,(5,3)), columns=list('abc'))
In [6]: df
Out[6]:
a b c
0 4 1 4
1 4 3 4
2 1 1 0
3 3 3 0
4 4 0 2
In [7]: df.b.value_counts()
Out[7]:
3 2
1 2
0 1
Name: b, dtype: int64
In [8]: df.c.value_counts()
Out[8]:
4 2
0 2
2 1
Name: c, dtype: int64
聚合后:
In [9]: g = df.groupby('a').max()
In [10]: g
Out[10]:
b c
a
1 1 0
3 3 0
4 3 4
In [11]: g.b.value_counts()
Out[11]:
3 2
1 1
Name: b, dtype: int64
In [12]: g.c.value_counts()
Out[12]:
0 2
4 1
Name: c, dtype: int64
答案 1 :(得分:2)
我认为在汇总max
后,您收到所有NaN
后会出现问题,因此value_counts
会返回空Series
:
df = pd.DataFrame({'A':[1,1,0,np.nan],
'npatience':[np.nan,np.nan,4,5],
'C':[1,0,np.nan,np.nan],
'D':[1,3,5,7]})
print (df)
A C D npatience
0 1.0 1.0 1 NaN
1 1.0 0.0 3 NaN
2 0.0 NaN 5 4.0
3 NaN NaN 7 5.0
print (df.A.value_counts())
1.0 2
0.0 1
Name: A, dtype: int64
print (df.C.value_counts())
0.0 1
1.0 1
Name: C, dtype: int64
g = df.groupby('npatience').max()
print (g)
A C D
npatience
4.0 0.0 NaN 5
5.0 NaN NaN 7
print (g.C)
npatience
4.0 NaN
5.0 NaN
Name: C, dtype: float64
#check if in column are all values NaNs
print (g.C.isnull().all())
True
print (g.A)
npatience
4.0 0.0
5.0 NaN
Name: A, dtype: float64
print (g.C.value_counts())
Series([], Name: C, dtype: int64)
print (g.A.value_counts())
0.0 1
Name: A, dtype: int64
print (g.C.value_counts(dropna=False))
NaN 2
Name: C, dtype: int64
print (g.A.value_counts(dropna=False))
NaN 1
0.0 1
Name: A, dtype: int64
编辑:
默认情况下, groupby
删除NaN
行(不能按NaN分组),因此它与groupby
之前的drop
调用相同:
g = df.dropna(subset=['npatience'])
print (g)
A C D
npatience
4.0 0.0 NaN 5
5.0 NaN NaN 7
print (g.C)
2 NaN
3 NaN
Name: C, dtype: float64
#check if in column are all values NaNs
print (g.C.isnull().all())
True
没有删除NaN
的groupby解决方案会将NaN
替换为df
,而不是1000
},如g = df.fillna(1000).groupby('npatience').max()
print (g)
A C D
npatience
4.0 0.0 1000.0 5
5.0 1000.0 1000.0 7
1000.0 1.0 1.0 3
print (g.C.value_counts())
1000.0 2
1.0 1
Name: C, dtype: int64
:
{{1}}