Python - Pandas 如何新增数据列

本文摘要:

新增数据列
1.直接赋值
2.df.apply方法
3.df.assgin方法
4.按条件选择分组分别赋值

直接赋值

例子续接上回

# df['High']、df['Low']其实是两个Series,相减返回仍是Series
# 此处'High-Low'是要新增的新列名,新列数据为df表每行的High列和Low列的高低差
df.loc[:, 'High-Low'] = df['High'] - df['Low']

df.apply方法

下面示例:
新增一个’wendu_type’列,表示温度类型:
1.如果High大于33则为高温
2.Low小于10则为低温
3.否则为常温

df.apply(func, axis) 返回一个Series对象,axis=0则用df的行索引index作为返回对象的索引,当axis=1则用df的列索引columns作为返回对象的索引。(2022.4.25补充:若需向函数传递参数,可用位置参数args=(xxx,),是个元组。)
对axis参数有疑惑可参考鄙人的另一篇小文章帮助理解:Python - Pandas 经常用到的axis参数怎么理解?千层蛋糕

def get_wendu_type(x):
	if x['High'] > 33:
		return '高温'
	elif x['Low'] < 10:
		return '低温'
	else:
		return '常温'

# 此处axis=1,Series的index为colums
df.loc[:, 'wendu_type'] = df.apply(get_wendu_type, axis=1)

# 查看温度类型的计数,会对该列进行分组统计
df['wendu_type'].value_counts()
# 返回一个Series
# 高温 137
# 常温 123
# 低温 66
# Name:wendu_type, dtype: int64

df.assign方法

该方法不修改df本身,返回一个新的DataFrame
该方法可以同时新增多列

df.assign(
	Higher = lambda x: x['High'] + 1
	Lower = lambda x: x['Low'] - 1 
)

2022.5.12 新增assign传参方法,如下:
在使用过程中,发现用上面的方法,参数固定写死了,无法灵活改变新增列名。
可以通过字典解包传参,代码如下:

# 这里的Higher,Lower都可以通过输入或读文件等方式传入,较灵活。
dic = {
    'Higher': lambda x: x['High'] + 1,
    'Lower': lambda x: x['High'] - 1,
}

new_df = df.assign(**dic)

不了解*,**打包解包的同学可以参考:python中*和**的打包和解包


按条件选择分组分别赋值

# 直接赋值新增列,给个默认值,会广播到所有行
df['new'] = ''  # 可以是任意默认值 1、''、'x'等

df.loc[df['High'] - df['Low'] > 10, 'new'] = '差别大'

df.loc[df['High'] - df['Low'] <= 10, 'new'] = '差别小'

df['new'].value_counts()
# 返回
# 差别大 130
# 差别小 100
# Name:new, dtype:int64

*此文仅为个人笔记

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值