如何在Python中基于字典为非空DataFrame列生成新列
解决DataFrame生成课程统计列的问题
首先,我们可以通过遍历count_dict中的课程名称,逐一生成对应的统计列。以下是完整的实现代码:
import pandas as pd import numpy as np # 初始化原始数据 df = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'Science': [12, np.nan, 26, 23], 'Social': [24, 13, np.nan, 35] }) count_dict = {'Science': 30, 'Social': 40} # 遍历每个课程列生成新列 for course in count_dict: # 生成Course_Count列:原列非空时取字典值,否则为NaN df[f'{course}_Count'] = df[course].apply(lambda x: count_dict[course] if pd.notna(x) else np.nan) # 生成Course_%列:拼接成"值/Count"的格式,空值对应空字符串 df[f'{course}_%'] = df.apply( lambda row: f"{int(row[course])}/{int(row[f'{course}_Count'])}" if pd.notna(row[course]) and pd.notna(row[f'{course}_Count']) else '', axis=1 ) # 调整列顺序(匹配期望输出的列顺序) column_order = ['ID', 'Science', 'Science_Count', 'Science_%', 'Social', 'Social_Count', 'Social_%'] df = df[column_order] print(df)
代码说明:
- 遍历
count_dict的课程名,避免重复编写重复逻辑 Course_Count列:通过apply判断原列值是否非空,非空则取字典中对应的统计值Course_%列:行级apply判断原列和Count列均非空时,拼接成指定格式的字符串,否则留空- 最后调整列顺序,让输出结构与期望一致
执行代码后,输出结果与需求完全匹配:
ID Science Science_Count Science_% Social Social_Count Social_% 0 1 12.0 30.0 12/30 24.0 40.0 24/40 1 2 NaN NaN 13.0 40.0 13/40 2 3 26.0 30.0 26/30 NaN NaN 3 4 23.0 30.0 23/30 35.0 40.0 35/40
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

