Python 根据列的重复值折叠数据帧并删除NaN值
我正在使用一个具有多个实验室值的患者数据库,每个实验室都有自己的行,即使是在同一天。我想根据每个患者的重复日期折叠行,以便每个日期有一行,其中包含当天所有实验室的结果 我尝试了各种Python 根据列的重复值折叠数据帧并删除NaN值,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用一个具有多个实验室值的患者数据库,每个实验室都有自己的行,即使是在同一天。我想根据每个患者的重复日期折叠行,以便每个日期有一行,其中包含当天所有实验室的结果 我尝试了各种groupby()和pd.merge()函数,但都没有成功 玩具示例: 将熊猫作为pd导入 将numpy作为np导入 PID=[1,1,1,2,2,2] ALC=[200,np.nan,np.nan,300,np.nan,np.nan] WBC=[np.nan,1000,np.nan,np.nan,2000,np.na
groupby()
和pd.merge()
函数,但都没有成功
玩具示例:
将熊猫作为pd导入
将numpy作为np导入
PID=[1,1,1,2,2,2]
ALC=[200,np.nan,np.nan,300,np.nan,np.nan]
WBC=[np.nan,1000,np.nan,np.nan,2000,np.nan]
peru_neut=[np.nan,np.nan,0.64,np.nan,np.nan,0.77]
日期=['11/1/18','11/2/18','11/2/18','1/11/04',
'1/11/04','1/11/04']
prac_dict={'PID':PID'date':date'ALC':ALC'WBC':WBC,
“per_neut”:per_neut}
pract_df=局部数据帧(prac_dict)
这就是我所拥有的
打印(pract_df)
PID日期ALC WBC每单位
01 11/1/18 200.0楠楠楠
2018年11月2日NaN 1000.0 NaN
2018年11月2日南南0.64
3 2 1/11/04 300.0楠楠楠楠
4.2 2004年11月1日NaN 2000.0 NaN
521/11/04南南0.77
这就是我想要的:
PID日期ALC白细胞计数
01 11/1/18 200.0楠楠楠
2018年11月2日NaN 1000.0 0.64
2 2 1/11/04 300.0 2000.0 0.77
非常欢迎您的建议 如果需要每个组每个列的第一个非缺失值,请使用: 但如果每组重复值,如
ALC
列最后一组中的50
,则需要指定聚合函数,如sum
,平均值,如果使用第一个
第二个值丢失:
PID = [1, 1, 1, 2, 2, 2]
ALC = [200, np.nan, np.nan, 300, np.nan, 50]
WBC = [np.nan, 1000, np.nan, np.nan, 2000, np.nan]
per_neut = [np.nan, np.nan, 0.64, np.nan, np.nan, 0.77]
date = ['11/1/18', '11/2/18', '11/2/18', '1/11/04',
'1/11/04','1/11/04']
prac_dict = {'PID':PID, 'date':date, 'ALC':ALC, 'WBC':WBC,
'per_neut':per_neut}
pract_df = pd.DataFrame(prac_dict)
print (pract_df)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 NaN
2 1 11/2/18 NaN NaN 0.64
3 2 1/11/04 300.0 NaN NaN
4 2 1/11/04 NaN 2000.0 NaN
5 2 1/11/04 50.0 NaN 0.77
如果需要每个组每个列的第一个非缺失值,请使用:
但如果每组重复值,如ALC
列最后一组中的50
,则需要指定聚合函数,如sum
,平均值,如果使用第一个
第二个值丢失:
PID = [1, 1, 1, 2, 2, 2]
ALC = [200, np.nan, np.nan, 300, np.nan, 50]
WBC = [np.nan, 1000, np.nan, np.nan, 2000, np.nan]
per_neut = [np.nan, np.nan, 0.64, np.nan, np.nan, 0.77]
date = ['11/1/18', '11/2/18', '11/2/18', '1/11/04',
'1/11/04','1/11/04']
prac_dict = {'PID':PID, 'date':date, 'ALC':ALC, 'WBC':WBC,
'per_neut':per_neut}
pract_df = pd.DataFrame(prac_dict)
print (pract_df)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 NaN
2 1 11/2/18 NaN NaN 0.64
3 2 1/11/04 300.0 NaN NaN
4 2 1/11/04 NaN 2000.0 NaN
5 2 1/11/04 50.0 NaN 0.77
df1 = pract_df.groupby(['PID','date'], as_index=False).sum(min_count=1)
print (df1)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 350.0 2000.0 0.77
df2 = pract_df.groupby(['PID','date'], as_index=False).mean()
print (df2)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 175.0 2000.0 0.77
df3 = pract_df.groupby(['PID','date'], as_index=False).first()
print (df3)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 300.0 2000.0 0.77