繁体   English   中英

在 dataframe 的每一列上使用具有不同功能的不同列上使用 apply()

[英]Using apply() on different columns with different functions on each column of a dataframe

我有一个DataFrame列名为age,salary 也有一些NaN值。 我想使用MeanMedian填充这些值。

原装DataFrame


age salary
0   20.0    NaN
1   45.0    22323.0
2   NaN 598454.0
3   32.0    NaN
4   NaN 48454.0

使用 apply( median()用各自列的mean()salary填充缺失的age

我用了

df['age','salary'].apply({'age':lambda row:row.fillna(row.mean()), 'salary':lambda row:row.fillna(row.median()) })

即使在我使用axis=1之后,它也显示Key error 'age','salary'

预期 Output

    age salary
0   20.000000   48454.0
1   45.000000   22323.0
2   32.333333   598454.0
3   32.000000   48454.0
4   32.333333   48454.0

有人可以告诉我如何正确地做到这一点以及后台发生了什么吗?

请告诉是否还有其他方法。 我正在从头开始学习 Pandas

在运行 apply 之前计算缺失值怎么样? 也就是说,计算age的平均值和salary的中位数,然后使用(注意在多列上操作所需的额外[]括号)

median_salary = df['salary'].median()
mean_age = df['age'].mean()

df[['age','salary']].apply({'age': lambda r: r.fillna(mean_age), 'salary': lambda r: r.fillna(median_salary)}) 

另请注意,这不会影响 dataframe 而是创建一个新的,因此如果要更新列,请使用以下内容:

df[['age', 'salary']] = df[['age', 'salary']].apply(...)

或者,在您只想填写缺失值的情况下,最好的解决方案可能是:

r.fillna({'age': mean_age, 'salary': median_salary}, inplace=True)

根据文档,您要求的最简单方法是将字典作为value参数传递:

值:标量、字典、系列或 DataFrame

用于填充孔的值(例如 0),或者是值的 dict/Series/DataFrame,指定用于每个索引(对于 Series)或列(对于 DataFrame)的值。 不在 dict/Series/DataFrame 中的值将不会被填充。 此值不能是列表。

在您的情况下,代码将是下一个:

df.fillna(value={'age': df.age.mean(), 'salary': df.salary.median()}, inplace=True)

并给出:

         age    salary
0  20.000000   48454.0
1  32.333333   22323.0
2  45.000000  598454.0
3  32.333333   48454.0
4  32.000000   48454.0
5  32.333333   48454.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM