如何基于字典键值保留Pandas DataFrame列中对应值最大的字符串
Pandas基于字典映射保留列中值最大字符串的实现方法
核心逻辑是将name列每个单元格的字符串按分隔符拆分为单个元素,再基于给定字典的映射值取最大元素即可,以下是两种不同场景的高效写法:
常规数据量场景(推荐,简洁易读)
十万行以内数据用该写法完全够用,代码维护成本低:
import pandas as pd fruit_dict = { "Apple": 10, "Watermelon": 20, "Cherry": 30 } df = pd.DataFrame( { "ID": [1, 2, 3, 4, 5], "name": [ "Apple, Watermelon", "Cherry, Watermelon", "Apple", "Cherry, Apple", "Cherry", ], } ) # 核心处理代码 df["name"] = df["name"].str.split(", ").apply(lambda x: max(x, key=fruit_dict.get))
运行后得到的df就是预期输出结果。
超大数据量场景(性能优化)
如果是百万行及以上的大表,可以用向量化操作替换apply降低开销:
# 拆分name列并展开为多行 df = df.assign(name=df["name"].str.split(", ")).explode("name") # 映射得到每个水果的分值 df["score"] = df["name"].map(fruit_dict) # 按分值倒排后取每个ID的第一条记录,就是分值最高的水果 df = df.sort_values("score", ascending=False).drop_duplicates("ID").drop(columns="score").sort_values("ID")
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

