以一个小数据集为例:
我们想要实现的需求是:将 df 中价格小于 10 的水果价格翻倍。
1. for 循环
做到这个项目的同学都有一定的 Python 编程基础,想到遍历,可能最先想到的就是使用 for 循环:
df1 = df.copy() #为了不混淆效果,每个方法创建一个副本
def func_for(df):
for index in df.index:
if df.loc[index, '价格'] <10:
df.loc[index, '价格'] *= 2
return df
df1 = func_for(df1)# 这里的 df 是作为参数传入 for_func 函数的
2. 对 dataframe 数据集使用 apply
axis=1 相当于对 df 中的每一行数据进行函数调用,apply_func 函数的参数是每一行数据
df2 = df.copy()
def func_df_apply(item):
if item['价格'] < 10:
item['价格'] *= 2
return item
df2 = df2.apply(func_df_apply, axis=1)
3. 对数据集中的列 Series 对象使用 apply
此时函数内的参数 cost 就是每一个价格
df3 = df.copy()
def func_series_apply(cost):
if cost < 10:
return cost*2
else:
return cost
df3['价格'] = df3['价格'].apply(func_series_apply)
4. 结合匿名函数 lambda 使用 apply
当需要实现的函数功能非常简单时,可以直接使用匿名函数:
df4 = df.copy()
df4['价格'] = df4['价格'].apply(lambda x: x*2 if x<10 else x)