使用groupby()处理爆炸后的Pandas DataFrame出现重复分组问题
问题原因与解决方法
问题原因
- 字符串空格未处理:原数据集的
country列中,多国家是用,(逗号+空格)分隔的,你用str.split(',')分割后,部分国家字符串前面会残留空格(比如" United States"),这些带空格的字符串会和无空格的("United States")被视为不同的分组键,导致groupby后同一国家出现多条记录。 - 数据引用逻辑不严谨:在
assign方法中你使用了原始的df['country'],但前面已经过滤得到了df_no_nan_country,这里应该用过滤后的列,虽然这个问题不一定直接导致重复,但会让代码逻辑存在隐患。
解决方法
针对上述问题,给出两种可行的修正方案:
方案1:分割时直接处理分隔符
直接用, (逗号+空格)作为分隔符分割,避免产生带空格的字符串:
import pandas as pd df = pd.read_csv('netflix_titles.csv') df['count'] = 1 df_no_nan_country = df[df['country'].notna()] # 用逗号+空格分割,同时使用过滤后的DataFrame的country列 df_split_countries = df_no_nan_country.assign(country=df_no_nan_country['country'].str.split(', ')).explode('country') # 按国家分组求和 country_counts = df_split_countries.groupby('country')['count'].sum() # 筛选数量>100的结果并排序 df_split_countries_max = country_counts[country_counts > 100].sort_values(ascending=False).head(30) print(df_split_countries_max)
方案2:分割后统一去除空格
如果不确定分隔符是否始终是逗号+空格,可以先分割再用str.strip()去除所有字符串的前后空格:
import pandas as pd df = pd.read_csv('netflix_titles.csv') df['count'] = 1 df_no_nan_country = df[df['country'].notna()] # 先按逗号分割,再展开 df_split_countries = df_no_nan_country.assign(country=df_no_nan_country['country'].str.split(',')).explode('country') # 去除每个国家字符串的前后空格 df_split_countries['country'] = df_split_countries['country'].str.strip() # 分组求和与筛选 country_counts = df_split_countries.groupby('country')['count'].sum() df_split_countries_max = country_counts[country_counts > 100].sort_values(ascending=False).head(30) print(df_split_countries_max)
内容的提问来源于stack exchange,提问作者athanasios kwn
相关产品推荐
相关产品推荐

