首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据Python中字符串的字典值删除字符串

根据Python中字符串的字典值删除字符串
EN

Stack Overflow用户
提问于 2021-12-07 12:21:16
回答 1查看 63关注 0票数 -1

我想根据字符串的字典值删除它们。条件是,如果字符串的值是单元格中字符串中最小的,则需要删除字符串,并保留字符串列不超过两个字符串。我怎样才能做到这一点?

代码语言:javascript
运行
复制
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",
        ],
    }
)

预期产出:

代码语言:javascript
运行
复制
   ID                        name
0   1               Cherry, Lemon
1   2              Cherry, Orange
2   3          Cherry, Watermelon
3   4                      Cherry
4   5              Cherry, Orange
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-07 12:30:30

对于获得每个组的top2值,似乎应该简化解决方案,如:

代码语言:javascript
运行
复制
df = (df.assign(name= df['name'].str.split(', '))
        .explode('name')
        .assign(new = lambda x: x['name'].map(fruit_dict))
        .sort_values(['ID', 'new'], ascending=[True, False])
        .groupby('ID')['name']
        .agg(lambda x: ','.join(x.head(2)))
        .reset_index()
       )
print (df)
   ID               name
0   1       Lemon,Cherry
1   2      Orange,Cherry
2   3  Cherry,Watermelon
3   4             Cherry
4   5      Orange,Cherry

或者将sortedkeyreverse=True结合使用

代码语言:javascript
运行
复制
f = lambda x: ','.join(sorted(x.split(', '), 
                              key=lambda x: fruit_dict.get(x, float('-inf')), 
                              reverse = True)[:2])
df['name'] = df['name'].apply(f)


print (df)
   ID               name
0   1       Lemon,Cherry
1   2      Orange,Cherry
2   3  Cherry,Watermelon
3   4             Cherry
4   5      Orange,Cherry
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70260053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档