首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据列的重复值折叠数据并删除NaN值

根据列的重复值折叠数据并删除NaN值
EN

Stack Overflow用户
提问于 2019-05-25 07:17:44
回答 1查看 121关注 0票数 1

我正在使用一个具有多个实验室值的病人数据库,每个实验室都有自己的行,即使在同一天也是如此。我想根据每个病人重复的日期折叠行,以便每个日期有一行,其中包含当天所有实验室的结果。

我尝试过各种groupby()pd.merge()函数,但都没有效果。

玩具例子:

代码语言:javascript
复制
import pandas as pd
import numpy as 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]
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)

这就是我所拥有的

代码语言:javascript
复制
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    NaN     NaN      0.77

这就是我想要的

代码语言:javascript
复制
   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

非常欢迎你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-25 07:20:49

如果需要,每个列的每个组首先不缺少值,请使用GroupBy.first

代码语言:javascript
复制
df = pract_df.groupby(['PID','date'], as_index=False).first()
print (df)
   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

但是,如果每个组重复的值(如50ALC列中的最后一个组中的值)是必需的,则指定聚合函数(如summean ),如果使用first第二个值丢失:

代码语言:javascript
复制
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
代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56302656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档