在我们处理数据的时候,需要根据某个列进行计算得到一个新列,以便后续的使用,相当于是根据已知列得到新的列,这时我们可以考虑使用pandas.DataFrame.assign()函数
1.使用assign函数不会改变原数据,而是返回一个新的DataFrame对象,包含所有现有列和新生成的列
提示Tips: assign和apply函数的主要区别在于前者不改变原数据,apply函数是在原数据的基础上添加新列
import pandas as pd
df = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
'B': ['B1', 'B2', 'B3'],
'C': ['C1', 'C2', 'C3']},
index=['One', 'Two', 'Three'])
res1 = df.assign(A=0)
res2 = df.assign(D=437)
# 将'A'列中的所有值小写,生成'Lower_A'列
res3 = df.assign(Lower_A =df["A"].str.lower())
'''
A B C
One A1 B1 C1
Two A2 B2 C2
Three A3 B3 C3
'''
print(df)
df
res1
res2
res3
2.assign函数能够同时操作多个列名,并且中间生成的列名能够直接使用
示例1:计算每个人的BMI指数
import pandas as pd
df1 = pd.DataFrame({
"Name":["Andy","Bob","Candy"],
"Weight":[78,65,87],
"Height":[1.82,1.75,1.89]
})
# 同时使用'Weight'和'Height'两列参与计算,生成'BMI'列
res1 = df1.assign(BMI = df1["Weight"] / (df1["Height"] ** 2))
df1
res1
示例2
import pandas as pd
df2 = pd.DataFrame({"col1":["Andy","Bob", "Candy"],
"col2":[12, 24, 48]})
# 在col4计算中直接使用col3
# 在col6中直接使用col5
res1 = df2.assign(
col3 = lambda x: x["col2"] / 2 + 10,
col4 = lambda x: x["col3"] * 5,
col5 = lambda x: x.col1.str.upper(),
col6 = lambda x: x.col5.str.lower()
)
df2
res1