如何筛选所有国家人口均低于100的大洲对应的DataFrame行
Pandas筛选全大洲人口均小于100的国家行
原始数据
给定的Pandas DataFrame如下:
import pandas as pd df = pd.DataFrame({ "Continent": list("AAABBBCCD"), "Country": list("FGHIJKLMN"), "Population": [90, 140, 50, 80, 80, 70, 50, 125, 50]})
需求说明
需要筛选出所有国家人口均小于100的大洲对应的全部行。例如:
- 大洲A包含人口140的国家,需剔除
- 大洲C包含人口125的国家,需剔除
期望输出结果:
Continent Country Population 3 B I 80 4 B J 80 5 B K 70 8 D N 50
你已尝试df[df["Population"] <= 100],但该方法仅过滤了单条符合人口条件的行,未结合大洲维度判断,以下是两种可行的解决方案:
解决方案一:用transform实现广播判断
利用groupby.transform将每个大洲的最大人口值映射到该行,再判断整个大洲是否符合条件:
# 生成布尔序列:标记该行所属大洲是否所有国家人口都<=100 valid_continents = df.groupby("Continent")["Population"].transform(max) <= 100 # 筛选符合条件的行 result = df[valid_continents] print(result)
解决方案二:先筛选符合条件的大洲再过滤
先找出所有符合要求的大洲列表,再用该列表过滤原DataFrame:
# 筛选出所有国家人口均<=100的大洲 valid_continent_list = df.groupby("Continent").filter(lambda group: group["Population"].max() <= 100)["Continent"].unique() # 过滤原数据 result = df[df["Continent"].isin(valid_continent_list)] print(result)
内容的提问来源于stack exchange,提问作者onimushawarlord
相关产品推荐
相关产品推荐

