如何基于value_counts结果筛选数据完整的国家数据集子集?
解决方法
你原来的代码报错是因为df["Area"].value_counts()返回的是一个以国家名称为索引的Series,直接用它的布尔结果去索引原DataFrame(原DataFrame的索引是行号),两者索引不匹配,导致KeyError。
正确实现分两种方式:
方法一:先获取符合条件的国家列表,再筛选
- 计算每个国家的数据行数,提取出行数等于240的国家:
# 获取数据行数为240的国家列表 valid_countries = df["Area"].value_counts()[df["Area"].value_counts() == 240].index.tolist()
- 筛选原DataFrame中属于这些国家的记录:
df_240 = df[df["Area"].isin(valid_countries)]
方法二:用groupby+transform直接筛选
这种方式更简洁,无需单独提取国家列表:
df_240 = df[df.groupby("Area")["Area"].transform("size") == 240]
transform("size")会给每一行返回其所在国家的总数据行数,再和240比较得到布尔索引,直接筛选即可。
注意:如果你的“数据完整”是指每个国家每年都有240行(60年总共有60*240=14400行),那需要把判断条件改成
== 14400,上面的代码逻辑不变,只需要修改数值。
内容的提问来源于stack exchange,提问作者Niamh
相关产品推荐
相关产品推荐

