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

*此文仅为个人笔记

你可能感兴趣的:(Pandas,python)