python - 如何检查同一数据框列中的重复值并通过根据频率删除行来应用 if 条件?
问题描述
数据框:
姓名 | 地点 | 评分 | 频率 |
---|---|---|---|
阿里 | 椰浆饭 | 1 星 | 1 |
阿里 | 巴斯金罗宾 | 4 星 | 3 |
阿里 | 椰浆饭 | 3 星 | 1 |
阿里 | 汉堡烧烤 | 2 星 | 2 |
李 | 薯条 | 1 星 | 3 |
阿布 | 麦当劳 | 3 星 | 3 |
阿布 | 肯德基 | 3 星 | 1 |
艾哈迈德 | 南多斯 | 3 星 | 2 |
艾哈迈德 | 伯格迪尔 | 2 星 | 3 |
艾哈迈德 | 烤肉串 | 1 星 | 10 |
这是样本数据集。逻辑是:
第一个条件:如果名称有重复值,检查频率,看看哪个更高,删除频率较低的行
第二个条件:如果没有重复的名字(例如:Lee),保留该行
第三个条件:评分相同(例如:Abu),保留第一个值
期望的输出:
姓名 | 地点 | 评分 | 频率 |
---|---|---|---|
阿里 | 巴斯金罗宾 | 4 星 | 3 |
李 | 薯条 | 1 星 | 3 |
阿布 | 肯德基 | 3 星 | 1 |
艾哈迈德 | 烤肉串 | 1 星 | 10 |
你们中有人知道我是如何在python pandas或pyspark中做到这一点的吗?
我在检查重复项时遇到了麻烦,并且可能将“if 条件”应用于此数据帧
解决方案
使用DataFrame.sort_values
withDataFrame.drop_duplicates
和 last 排序索引:
df = (df.sort_values(['Frequency','Rating'],
ascending=[False, True])
.drop_duplicates('name')
.sort_index())
print (df)
name Location Rating Frequency
1 Ali Baskin Robin 4 star 3
4 Lee Fries 1 star 3
5 Abu Mcdonald 3 star 3
9 Ahmad Kebab 1 star 10
推荐阅读
- c++ - GDB:如何将内存地址转换为 STL 对象
- java - 如何在 Java 8 中清除线程池的线程本地内容?
- php - 如何修复 WordPress 更新失败和发布失败的错误?
- javascript - 在 Outlook JS 加载项中调用 REST API 时确认事件完成
- python - XML 处理脚本只列出一个元素,但要列出多个元素
- triggers - 每当更改订单行项目时触发以在文本区域自定义字段中显示逗号分隔的产品
- snowflake-cloud-data-platform - 当我运行 cursor.fetch_pandas_all() 时,Jypyter Notebook 内核死机
- ios - 在目标 c 中使用 UIAlertViewController 时如何关闭呈现的视图控制器?
- c - 为什么我的循环不检查 argv 中的字母并打印出错误?
- javascript - 可以使用 useRef 挂钩清空输入值吗?