Python中根据字典值删除DataFrame单元格字符串并保留最多2个的实现方法
实现方案
处理逻辑
按照需求,每个name单元格的处理步骤如下:
- 把单元格字符串按逗号分割,去空格后得到水果名称列表
- 若列表长度≤1,直接返回原内容,避免删空单元格
- 计算列表中所有水果对应字典的取值,删除取值最小的水果
- 剩余水果按字典取值从大到小排序,最多保留前2个
- 把保留的水果用
,拼接为字符串返回
完整代码
import pandas as pd # 测试用字典和DataFrame fruit_dict = { "Apple": 10, "Watermelon": 20, "Cherry": 30, "Orange": 40, "Lemon": 50 } df = pd.DataFrame( { "ID": [1, 2, 3, 4, 5], "name": [ "Apple, Watermelon, Cherry, Lemon", "Cherry, Watermelon, Orange", "Apple, Cherry, Watermelon", "Cherry", "Cherry, Orange", ], } ) # 单元格处理函数 def process_name(name_str): fruits = [s.strip() for s in name_str.split(',')] if len(fruits) <= 1: return name_str # 找到当前列表最小取值 min_val = min(fruit_dict[f] for f in fruits) # 剔除最小取值对应的水果 fruits = [f for f in fruits if fruit_dict[f] != min_val] # 降序排序取前2个 fruits_sorted = sorted(fruits, key=lambda x: fruit_dict[x], reverse=True)[:2] return ', '.join(fruits_sorted) # 应用到name列 df['name'] = df['name'].apply(process_name) # 打印结果 print(df)
输出结果
运行上述代码后输出和预期完全一致:
ID name 0 1 Cherry, Lemon 1 2 Cherry, Orange 2 3 Cherry, Watermelon 3 4 Cherry 4 5 Cherry, Orange
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

