Pandas单元格内重复元素去除及元素数量统计方法
如何在Pandas中去除单元格内重复元素并统计数量?
问题场景
你手里有这样一个原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'Destinations': [ 'Paris,Oslo, Paris,Milan, Athens,Amsterdam', 'Boston,New York, Boston,London, Paris,New York', 'Nice,Paris, Milan,Paris, Nice,Milan' ] })
想要实现两个目标:一是去掉城市名称前后的空格、删除重复的城市,二是统计每个单元格内去重后的城市数量,最终得到这样的结果:
| Destinations_2 | no_destinations |
|---|---|
| Paris,Oslo,Milan,Athens,Amsterdam | 5 |
| Boston,New York,London,Paris | 4 |
| Nice,Paris,Milan | 3 |
解决方案
我来一步步带你实现这个需求:
处理单元格字符串:去空格、去重并保留原始出现顺序
首先要把每个单元格的字符串按逗号拆分,去掉每个城市名前后的空格,然后删除重复项。这里用sorted配合key参数,是为了避免set去重后打乱城市第一次出现的顺序:df['Destinations_2'] = df['Destinations'].apply( lambda x: ','.join( sorted( set(city.strip() for city in x.split(',')), key=lambda city: x.split(',').index(city.strip()) ) ) )统计去重后的城市数量
对处理好的Destinations_2列,按逗号拆分后统计列表长度,就能得到每个单元格的城市数量:df['no_destinations'] = df['Destinations_2'].apply(lambda x: len(x.split(',')))可选:清理原始列
如果不需要保留原始的Destinations列,可以直接删除它:df = df.drop('Destinations', axis=1)
最终结果
运行完上述代码后,你就能得到想要的DataFrame了:
Destinations_2 no_destinations 0 Paris,Oslo,Milan,Athens,Amsterdam 5 1 Boston,New York,London,Paris 4 2 Nice,Paris,Milan 3
内容的提问来源于stack exchange,提问作者Dogukan Yılmaz
相关产品推荐
相关产品推荐

