当前位置: 首页 > news >正文

在Pandas中可以根据某一列的值生成新的列

在 Pandas 中,可以根据某一列的值生成新的列,常见的方法包括:

  1. df['新列'] = df['某列'].map(字典)
  2. df['新列'] = df['某列'].apply(函数)
  3. np.where(条件, 真值, 假值)
  4. df.loc[条件, '新列'] = 值
  5. df.assign(新列=lambda x: 计算逻辑)
  6. df['某列'].str.方法()(字符串处理)

文章目录

  • 1. 使用 `map()` 映射字典
  • 2. 使用 `apply()` 应用函数
  • 3. 使用 `np.where()` 条件判断
    • 多条件判断(`np.select()`)
  • 4. 使用 `loc[]` 条件赋值
  • 5. 使用 `assign()` 生成新列
  • 6. 字符串处理(`str.方法()`)
  • 总结


1. 使用 map() 映射字典

适用于 离散值 的映射(如分类编码)。

import pandas as pddf = pd.DataFrame({'gender': ['男', '女', '男', '女']})# 定义映射字典
gender_map = {'男': 'M', '女': 'F'}# 生成新列
df['gender_code'] = df['gender'].map(gender_map)print(df)

输出

  gender gender_code
0      男           M
1      女           F
2      男           M
3      女           F

2. 使用 apply() 应用函数

适用于 复杂逻辑 的计算。

def calculate_bonus(salary):if salary > 10000:return salary * 0.2else:return salary * 0.1df = pd.DataFrame({'name': ['Alice', 'Bob'], 'salary': [12000, 8000]})# 生成新列
df['bonus'] = df['salary'].apply(calculate_bonus)print(df)

输出

    name  salary  bonus
0  Alice   12000  2400.0
1    Bob    8000   800.0

3. 使用 np.where() 条件判断

适用于 二分类多条件 赋值。

import numpy as npdf = pd.DataFrame({'score': [85, 60, 45, 90]})# 生成新列(及格/不及格)
df['result'] = np.where(df['score'] >= 60, '及格', '不及格')print(df)

输出

   score result
0     85     及格
1     60     及格
2     45   不及格
3     90     及格

多条件判断(np.select()

conditions = [(df['score'] >= 90),(df['score'] >= 60) & (df['score'] < 90),(df['score'] < 60)
]
choices = ['优秀', '及格', '不及格']df['grade'] = np.select(conditions, choices)print(df)

输出

   score grade
0     85    及格
1     60    及格
2     45  不及格
3     90    优秀

4. 使用 loc[] 条件赋值

适用于 基于条件修改或创建列

df = pd.DataFrame({'age': [25, 30, 18, 40]})# 生成新列(是否成年)
df.loc[df['age'] >= 18, 'is_adult'] = '是'
df.loc[df['age'] < 18, 'is_adult'] = '否'print(df)

输出

   age is_adult
0   25        是
1   30        是
2   18        是
3   40        是

5. 使用 assign() 生成新列

适用于 链式操作,不会修改原 DataFrame。

df = pd.DataFrame({'price': [100, 200, 300]})# 生成新列(含税价格)
df = df.assign(taxed_price=lambda x: x['price'] * 1.1)print(df)

输出

   price  taxed_price
0    100        110.0
1    200        220.0
2    300        330.0

6. 字符串处理(str.方法()

适用于 文本列 的处理。

df = pd.DataFrame({'email': ['alice@example.com', 'bob@test.com']})# 提取域名
df['domain'] = df['email'].str.split('@').str[1]print(df)

输出

             email       domain
0  alice@example.com  example.com
1     bob@test.com     test.com

总结

方法适用场景示例
map()离散值映射df['新列'] = df['某列'].map({'A': 1, 'B': 2})
apply()复杂逻辑df['新列'] = df['某列'].apply(lambda x: x*2)
np.where()二分类df['新列'] = np.where(df['某列'] > 0, '正', '负')
np.select()多条件df['新列'] = np.select([cond1, cond2], ['A', 'B'])
loc[]条件赋值df.loc[df['某列'] > 0, '新列'] = '正'
assign()链式操作df = df.assign(新列=lambda x: x['某列']*2)
str.方法()字符串处理df['新列'] = df['某列'].str.upper()

最佳实践

  • 优先使用 向量化操作(如 map()np.where())。
  • 复杂逻辑用 apply()assign()
  • 字符串处理用 str.方法()
http://www.dtcms.com/a/458750.html

相关文章:

  • 高端网站建设1北京网站建设大概需要多少钱
  • 在线制作网站公章怎么做信息流广告代理商
  • 山西省住房和城乡建设厅官方网站广东建设数据开放平台系统
  • 有做国外网站推广吗wordpress如何双语
  • 青岛做网站哪家好怎么样让百度搜到自己的网站
  • CSA总结复习1
  • 新网站制作平台免费软件下载破解版
  • vainfo-源码分析
  • 青岛网站建设找手机版网站的优势
  • 安徽圣力建设集团有限公司网站网站开发工程师题
  • 修复 Windows 上的 PHP HTTPS 证书颁发机构问题
  • 长春网站建设电话咨询网页制作与设计类课程
  • 怎么将网站权重提上去网站的后台管理
  • 网站 内容劳务公司
  • 河南省教育类网站前置审批WordPress动画随音乐变化
  • 网站页头设计国外医院网站设计
  • 网站建设:成都今网科技设计师培训感悟
  • 南方科技大学网站建设做视频网站服务器怎么选择
  • Python 字符串与布尔值详解
  • 用vs做购物网站dw网页编辑器
  • 有什么网站专做买生活污水设备湖北手机网站制作
  • 电工培训青岛谁优化网站做的好
  • 无需下载国外黄冈网站推广建筑人才招聘信息网
  • 2025年--Lc175--H671.二叉树中第二小的节点(遍历二叉树)--Java版
  • 网站多个域名备案融资平台公司定义
  • 电子商务网站建设花费骆驼有没有做网站的公司
  • 查询网站有没有备案做网站 视频
  • js做网站统计如何维护网站的运营
  • 长沙做网站开发价格简述网站设计规划的步骤
  • 神级网页设计网站wordpress表结构怎么样