请教个问题,我想把数据中名字的重复值删掉,只保留年纪大的怎么整呢?
三年谪宦此栖迟,万古惟留楚客悲。
大家好,我是皮皮。
一、前言
国庆期间在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)
多条件根据排序删除重复值
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)
# 多条件删除(名字一样,根据年龄删除,保留最大的,年龄一样,再根据身高删除,保留最大的)
b = data.sort_values(['age', 'high'], ascending=False).drop_duplicates('name')
print(b)
可以说学完这里,sort_values()
的用法算是基本上吃透了。
三、总结
大家好,我是皮皮。这篇文章主要盘点了一个Pandas
处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【谢峰】提问,感谢【甯同学】、【论草莓如何成为冻干莓】给出的思路和代码解析,感谢【dcpeng】、【此类生物】、【凡人不烦人】等人参与学习交流。
相关文章
- 客快物流大数据项目(八十一): Kudu原理
- 数据可视化的作用
- 受ChatGPT启发,10天完成能和数据聊天APP,回答问题不输本科生
- ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测|附代码数据
- MongoDB中索引的创建和使用详解大数据
- Jedis connection timeout问题详解大数据
- MySQL数据导入HBase:构建NoSQL数据库(mysql导入hbase)
- 恢复数据:如何解决Redis丢失问题(redis数据丢失)
- 报告关闭Oracle AWR报告:重视你的数据安全性(关闭oracleawr)
- 库字符修改Linux数据库字符的技巧(linux修改数据)
- 解决Oracle中重复数据问题(oracle显示重复数据)
- MySQL 分片解决大数据存储问题(mysql分片分区)
- 数据失效解决Redis Java中数据过期失效问题(redisjava过期)
- Redis服务器问题:经常出现闪退现象,对数据的管理带来很大麻烦,请找出问题并解决。(redis闪退)
- MySQL统计当天数据:洞察每日变化(mysql统计当天数据)
- 快速使用并行写入Redis解决大数据问题(并行写redis)
- 蝙蝠的力量快速导出Oracle数据(bat 导出oracle)
- 解决Oracle两数据库同步问题(oracle二个数据同步)
- Redis键值对数据自动过期问题(redis过期会删除)
- 使用Redis自增编号解决数据编号问题(redis自增编号)
- jquery$.ajax()取xml数据的小问题解决方法