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
*此文仅为个人笔记
来源:DreamingBetter