• 请教个问题,我想把数据中名字的重复值删掉,只保留年纪大的怎么整呢?


    大家好,我是皮皮。

    一、前言

    国庆期间在Python白银交流群【谢峰】问了一个Pandas处理的问题,提问截图如下:

    代码如下:

    import pandas as pd
    data = [{'name': '小明', 'age': 18}, {'name': '小张', 'age': 20}, {'name': '小明', 'age': 20}, {'name': '小明', 'age': 38}]
    data = pd.DataFrame(data)
    # print(data)
    # 删除名字重复的,只保留年龄最大的那个
    data = data.drop_duplicates('name', inplace=False)
    print(data)
    

    二、实现过程

    这里【甯同学】给了一个思路,先排个序,再删,并且给出了如下代码:

    import pandas as pd
    data = [{'name': '小明', 'age': 18}, {'name': '小张', 'age': 20}, {'name': '小明', 'age': 20}, {'name': '小明', 'age': 38}]
    data = pd.DataFrame(data)
    # print(data)
    # 删除名字重复的,只保留年龄最大的那个
    data = data.sort_values(by="age", ascending=False).drop_duplicates('name', inplace=False)
    # data = data.drop_duplicates('name', inplace=False)
    print(data)
    

    顺利地解决了粉丝的问题。下面是他自己整理出来的,也一起分享给大家了。和上面的代码没太大区别,只是省去了参数名,硬要说就是默认参数省了和没省的区别。

    import pandas as pd
    data = [{'name': '小明', 'age': 18}, {'name': '小张', 'age': 20}, {'name': '小明', 'age': 20}, {'name': '小明', 'age': 38}]
    data = pd.DataFrame(data)
    # print(data)
    # 删除名字重复的,只保留年龄最大的那个
    data = data.sort_values('age', ascending=False).drop_duplicates(subset=['name'], keep='first')
    print(data)
    data = data.sort_values(by='age', ascending=False).drop_duplicates('name', inplace=False)
    print(data)
    

    后来粉丝自己还拓展了下,这里拿出来跟大家一起分享。

    一、sort_values()函数用途

    pandas中的sort_values()函数原理类似于SQL中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。

    二、sort_values()函数的具体参数

    • 用法:DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
    • 参数说明
    参数 说明
    by 指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
    axis 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
    ascending 是否按指定列的数组升序排列,默认为True,即升序排列
    inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换
    na_position {‘first’,‘last’},设定缺失值的显示位置

    三、例子

    单条件根据排序删除重复值

    import pandas as pd
    data = [{'name': '小明', 'age': 18, 'high': 155}, {'name': '小张', 'age': 20, 'high': 145}, {'name': '小明', 'age': 38, 'high': 175}, {'name': '小明', 'age': 38, 'high': 195}]
    data = pd.DataFrame(data)
    
    # 单条件删除(名字重复的,只保留年龄最大的那个)
    a = data.sort_values('age', ascending=False).drop_duplicates('name')
    print(a)
    

    多条件根据排序删除重复值

    mport pandas as pd
    data = [{'name': '小明', 'age': 18, 'high': 155}, {'name': '小张', 'age': 20, 'high': 145}, {'name': '小明', 'age': 38, 'high': 175}, {'name': '小明', 'age': 38, 'high': 195}]
    data = pd.DataFrame(data)
    
    # 多条件删除(名字一样,根据年龄删除,保留最大的,年龄一样,再根据身高删除,保留最大的)
    b = data.sort_values(['age', 'high'], ascending=False).drop_duplicates('name')
    print(b)
    

    可以说学完这里,sort_values()的用法算是基本上吃透了。

    三、总结

    大家好,我是皮皮。这篇文章主要盘点了一个Pandas处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

    最后感谢粉丝【谢峰】提问,感谢【甯同学】、【论草莓如何成为冻干莓】给出的思路和代码解析,感谢【dcpeng】、【此类生物】、【凡人不烦人】等人参与学习交流。

  • 相关阅读:
    2018-2019-1 20165202 20165210 20165214 实验一 开发环境的熟悉
    20165214 朱文远 缓冲区溢出漏洞实验
    2018-2019-1 20165214 《信息安全系统设计基础》第三周学习总结
    2018-2019-1 20165214 《信息安全系统设计基础》第2周学习总结
    2018-2019-1 20165214 《信息安全系统设计基础》第1周学习总结
    20165214 2017-2018-2 《Java程序设计》课程总结
    编程实现类似Linux系统的cp功能
    编程实现Linux系统的od功能
    2017-2018-2 20165214 实验五《网络编程与安全》实验报告
    2018-2019-1 20165212 20165313 2016522 实验一 开发环境的熟悉
  • 原文地址:https://www.cnblogs.com/dcpeng/p/16834549.html
Copyright © 2020-2023  润新知