首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >群并删除NaN行,同时保留Pandas中的行

群并删除NaN行,同时保留Pandas中的行
EN

Stack Overflow用户
提问于 2020-12-18 06:47:57
回答 2查看 352关注 0票数 1

给定测试数据集如下:

代码语言:javascript
复制
   id city   name
0   1   bj    NaN
1   2   bj   jack
2   3   bj    NaN
3   4   bj    jim
4   5   sh    NaN
5   6   sh    NaN
6   7   sh  steve
7   8   sh  fiona
8   9   sh    NaN

我如何通过city进行群群,为name删除NaN行,同时只为每个group保留一个行?非常感谢。

预期结果如下:

代码语言:javascript
复制
   id city   name
0   1   bj    NaN
1   2   bj   jack
2   4   bj    jim
3   5   sh    NaN
4   7   sh  steve
5   8   sh  fiona

df = pd.read_clipboard(na_filter = False)从excel文件中读取的新数据集,请注意N/A不应被视为NaN

代码语言:javascript
复制
      newcode build_name  floor  rent_id      rent_name
0  1210010403         C栋     25  1765228   (株)有延商店上海事务所
1  1210010403         C栋     25  1765229            N/A
2  1210010403         C栋     25  1765229            N/A
3  1210010403         C栋     25  1765229            N/A
4  1210010403         C栋     25  1765230  上海皇瑾文化传媒有限公司 
5  1210010403         C栋     25  1765229            N/A
6  1210010403         C栋     25  1765231     上海农邦实业有限公司
7  1210010403         C栋     25  1765232            N/A
8  1210010403         C栋     25  1765231   上海农NA邦实业有限公司

代码:df[df['rent_name'].ne('N/A') | ~df.duplicated(subset=['newcode', 'build_name', 'floor'])],与df[~(df['rent_name'].eq('N/A') & df.duplicated(subset = ['newcode', 'build_name', 'floor'], keep = 'first'))]的结果相同

退出:

代码语言:javascript
复制
      newcode build_name  floor  rent_id      rent_name
0  1210010403         C栋     25  1765228   (株)有延商店上海事务所
4  1210010403         C栋     25  1765230  上海皇瑾文化传媒有限公司 
6  1210010403         C栋     25  1765231     上海农邦实业有限公司
8  1210010403         C栋     25  1765231   上海农NA邦实业有限公司

您可以看到结果中缺少一个N/A行,我不知道为什么。

期望产出:

代码语言:javascript
复制
      newcode build_name  floor  rent_id      rent_name
0  1210010403         C栋     25  1765228   (株)有延商店上海事务所
1  1210010403         C栋     25  1765229            N/A
4  1210010403         C栋     25  1765230  上海皇瑾文化传媒有限公司 
6  1210010403         C栋     25  1765231     上海农邦实业有限公司
8  1210010403         C栋     25  1765231   上海农NA邦实业有限公司
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-18 07:05:07

用于每个city不缺少值或第一次重复值的链式条件,名称:

代码语言:javascript
复制
df = df[df['name'].notna() | ~df.duplicated(subset=['city', 'name'])]
print(df)
   id city   name
0   1   bj    NaN
1   2   bj   jack
3   4   bj    jim
4   5   sh    NaN
6   7   sh  steve
7   8   sh  fiona

编辑:对于测试字符串,N/A使用Series.ne

代码语言:javascript
复制
df = df[df['name'].ne('N/A') | ~df.duplicated(subset=['city', 'name'])]
print(df)
   id city   name
0   1   bj    N/A
1   2   bj   jack
3   4   bj    jim
4   5   sh    N/A
6   7   sh  steve
7   8   sh  fiona

如果要测试多个值,请使用带有反向掩码的Series.isin

代码语言:javascript
复制
df = df[~df['name'].isin(['N/N','N/A']) | ~df.duplicated(subset=['city', 'name'])]
print(df)

   id city   name
0   1   bj    N/A
1   2   bj   jack
3   4   bj    jim
4   5   sh    N/A
6   7   sh  steve
7   8   sh  fiona

编辑:

代码语言:javascript
复制
df = df[df['name'].notna() | ~df.duplicated(subset=['city', 'name'])]
print(df)
   id city   name
0   1   bj    NaN
1   2   bj   jack
3   4   bj    jim
4   5   sh    NaN
6   7   sh  steve
7   8   sh  fiona
9  10   gz    NaN

EDIT1:对于重复的测试,必须使用NaN添加列,此处为rent_name

代码语言:javascript
复制
df =  df[df['rent_name'].ne('N/A') | 
         ~df.duplicated(subset=['newcode', 'build_name', 'floor', 'rent_name'])]
print (df)
    
      newcode build_name  floor  rent_id     rent_name
0  1210010403         C栋     25  1765228  (株)有延商店上海事务所
1  1210010403         C栋     25  1765229           N/A
4  1210010403         C栋     25  1765230  上海皇瑾文化传媒有限公司
6  1210010403         C栋     25  1765231    上海农邦实业有限公司
8  1210010403         C栋     25  1765231  上海农NA邦实业有限公司
票数 1
EN

Stack Overflow用户

发布于 2020-12-18 07:02:04

布尔选择NaNs,删除在namecity中复制的最后一个

代码语言:javascript
复制
df[~(df.name.isna() & df.duplicated(subset = ['city', 'name'], keep = 'first'))]

    id city   name
0   1   bj    NaN
1   2   bj   jack
3   4   bj    jim
4   5   sh    NaN
6   7   sh  steve
7   8   sh  fiona
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65352814

复制
相关文章

相似问题

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