如何在Pandas透视表中统计各届均获奖牌的国家数量?
统计每届都至少获得一枚奖牌的国家数量(Pandas实现)
假设我们已经有了这个以edition为索引、国家代码为列的奖牌透视表(记为medal_pivot),里面的nan代表该国家在对应届次没有获得奖牌。要找出每一届都至少拿过1枚奖牌的国家并统计数量,可以按以下步骤来做:
步骤1:标记每个国家每届是否获得奖牌
我们首先把原表的数值转换成布尔值——用notna()方法,把有奖牌的单元格(非nan)标记为True,没奖牌的(nan)标记为False:
has_medal = medal_pivot.notna()
步骤2:筛选出每届都获奖的国家
接下来,我们需要计算每个国家有多少届拿到了奖牌(对每一列求和,True会被算作1,False算作0),然后对比这个数值和总届数:如果求和结果等于总届数,就说明这个国家每一届都没缺席。
# 先获取总共有多少届 total_editions = len(medal_pivot.index) # 筛选出符合条件的国家 consistent_countries = has_medal.columns[has_medal.sum() == total_editions]
步骤3:统计数量并查看结果
最后就可以统计这些国家的数量,或者直接列出它们:
count = len(consistent_countries) print(f"每届都至少获得一枚奖牌的国家有{count}个:{list(consistent_countries)}")
验证示例结果
拿题目里的透视表来看,总共有8届(1800到1887):
- ALG每届都有非
nan值,求和结果是8; - ANZ同样每届都有记录,求和结果也是8;
- 其他国家比如AFG在1887届是
nan、AHO在1886/1887届是nan,都不满足条件。所以最终结果是2个国家,和示例完全匹配。
内容的提问来源于stack exchange,提问作者prabs
相关产品推荐
相关产品推荐

