【发布时间】:2020-12-25 16:52:59
【问题描述】:
我有一个包含调查数据的数据框。调查数据评估了多个因素,例如教练、多样性、参与度等。还有其他几个列可以捕获人口统计数据(例如,年龄、部门等)。我想根据包含评级的列添加列。
添加这些列的目的是 a) 提供正面回应的计数,b) 获得正面回应的百分比(正面回应的数量/该因素中的项目数量)和 c) 获得正面回应的百分比因子级别的有利响应(条件是如果任何项目缺少响应,则在因子级别它将为 NULL)
下表显示了仅包含指导项的所需输出。该表应包含其他评分列,并应适用于多样性、领导力、敬业度等因素。
Coach_q1 Coach_q2 Coach_q3 coach_fav_count coach_fav_perc coach_agg_perc
Favourable Neutral Favourable 2 66% 66%
Favourable Favourable Fabourable 3 100% 100%
NaN Favourable NaN 1 33% NaN
Favourable NaN Favourable 2 66% NaN
以下代码用于获取 _favcount 列和 _fav% 列。 ratingcollist 用于仅对具有这些前缀的列应用转换。但是,我无法获得旨在获得整个因素的有利响应百分比的因素水平列 - 仅当针对该特定因素的所有问题都已回答时(即,如果在特定因素中的任何项目中缺少响应因子,那么该因子将产生一个 NaN 值)。
感谢任何形式的帮助,谢谢。
ratingcollist = ['Coach_','Diversity_','Leadership_','Engagement_']
#create a for loop to get all the columns that match the column list keyword
for rat in ratingcollist:
cols = df.filter(like=rat).columns
#create 2 new columns for each factor, one for count of Favourable responses and one for percentage of Favourable responses
if len(cols) > 0:
df[f'{rat.lower()}fav_count'] = (df[cols] == 'Favourable').sum(axis=1)
df[f'{rat.lower()}fav_perc'] = (df[f'{rat.lower()}fav_count'] / len(cols)) * 100
【问题讨论】:
标签: python-3.x pandas numpy dataframe for-loop