You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:54:27