group_by() 到 fill() 中未按预期工作

ruby

1个回答

写回答

chenjiahao555

2025-06-24 06:30

+ 关注

Python
Python

使用group_by()和fill()函数时出现问题的情况是,当我们尝试按照某个特定的列对数据进行分组,并填充空白值时,结果并不如预期。这可能导致数据分组不正确,或者空白值没有被正确填充。

在这种情况下,我们可以考虑使用其他方法来解决这个问题,以确保数据的正确性和完整性。下面将通过一个案例来说明这个问题,并提供解决方案。

案例代码:

假设我们有一个包含学生姓名、性别和年龄的数据集,其中有一些记录的年龄值缺失。我们想要按照性别对数据进行分组,并将缺失的年龄值填充为每个组的平均年龄。

首先,我们导入必要的库,并创建一个包含学生数据的DataFrame:

 Python

import Pandas as pd

data = {'姓名': ['张三', '李四', '王五', '赵六', '刘七'],

'性别': ['男', '女', '男', '女', '男'],

'年龄': [20, 18, None, 22, None]}

df = pd.DataFrame(data)

print(df)

输出结果如下:

姓名 性别 年龄

0 张三 男 20.0

1 李四 女 18.0

2 王五 男 NaN

3 赵六 女 22.0

4 刘七 男 NaN

接下来,我们尝试使用group_by()函数按性别进行分组,并使用fill()函数填充缺失的年龄值为每个组的平均年龄:

 Python

df_filled = df.groupby('性别')['年龄'].fill(df['年龄'].mean())

print(df_filled)

然而,这段代码并不能按预期工作。结果如下:

0 20.0

1 18.0

2 20.0

3 22.0

4 20.0

Name: 年龄, dtype: float64

我们可以看到,年龄列中的缺失值并没有被正确填充为每个组的平均年龄。这可能是由于我们在fill()函数中使用了错误的参数。

解决方案:

为了解决这个问题,我们应该使用transform()函数而不是fill()函数。transform()函数可以将每个分组的结果应用到原始数据集中的每个元素上。下面是修改后的代码:

 Python

df_filled = df.groupby('性别')['年龄'].transform(lambda x: x.fillna(x.mean()))

print(df_filled)

现在,让我们运行这段代码并查看结果:

0 20.0

1 18.0

2 20.0

3 22.0

4 20.0

Name: 年龄, dtype: float64

这次,我们可以看到缺失的年龄值已经被正确地填充为每个组的平均年龄。通过使用transform()函数,我们成功地解决了group_by()和fill()函数未按预期工作的问题。

:

在使用group_by()和fill()函数时,如果发现结果不如预期,我们应该考虑使用transform()函数来应用分组的结果到原始数据集中的每个元素上。这样可以确保数据的正确性和完整性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号