如何计算Pandas DataFrame中有教育背景的受访者占比?
问题
我有一个大型Pandas DataFrame,数据示例如下:
import pandas as pd # 初始化列表数据 data = {'interview_key':['00-60-62-69', '00-80-63-65', '00-81-80-59', '00-87-72-75'], 'any_education':['YES', 'YES', 'NO', 'NAN']} # 创建DataFrame df = pd.DataFrame(data)
其中any_education列的YES代表有教育背景,NO代表无教育背景,NAN是字符串类型的缺失值。需要计算有教育背景的受访者占比(即该列中YES样本占总样本的比例)。
解决方案
方法1:直接统计计算
通过布尔索引统计YES的数量,再除以总样本数:
yes_count = (df['any_education'] == 'YES').sum() yes_ratio = yes_count / df.shape[0] print(yes_ratio) # 输出:0.5
方法2:利用value_counts快速获取占比
使用value_counts的normalize=True参数直接返回各取值的占比,再提取YES对应的比例(若数据中无YES,get('YES', 0)可避免报错):
yes_ratio = df['any_education'].value_counts(normalize=True).get('YES', 0) print(yes_ratio) # 输出:0.5
特殊情况处理
如果数据中存在Pandas原生缺失值(如pd.NA/np.nan)而非字符串NAN,可以先过滤缺失值再计算:
# 过滤缺失值 valid_data = df['any_education'].dropna() # 计算占比 yes_ratio = (valid_data == 'YES').sum() / len(valid_data)
内容的提问来源于stack exchange,提问作者LivingstoneM
相关产品推荐
相关产品推荐

