Pandas: 如何用groupby的平均值填充空值?
Pandas: How to fill null values with mean of a groupby?
我有一个数据集,其中包含一些缺失的数据,如下所示:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0
我需要填写空值才能在模型中使用数据。每次第一次出现类别时,它都是 NULL。我想要做的是,对于类别 A
和 B
这样具有多个值的情况,用该类别的平均值替换空值。对于仅出现一次的类别 C
,只需填写其余数据的平均值。
我知道我可以简单地对 C
这样的情况执行此操作以获取所有行的平均值,但我一直在尝试对 A 和 B 执行类别方式并替换空值。
df['value'] = df['value'].fillna(df['value'].mean())
我需要最终的df是这样的
id category value
1 A 6.25
2 B 1.0
3 A 10.5
4 C 4.15
5 A 2.0
6 B 1.0
我认为您可以使用列的所有值的 groupby
and apply
fillna
with mean
. Then get NaN
if some category has only NaN
values, so use mean
来填充 NaN
:
df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
id category value
0 1 A 6.25
1 2 B 1.00
2 3 A 10.50
3 4 C 4.15
4 5 A 2.00
5 6 B 1.00
您还可以使用 GroupBy
+ transform
以分组方式填充 NaN
值。这种方法避免了低效的apply
+ lambda
。例如:
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())
我有一个数据集,其中包含一些缺失的数据,如下所示:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0
我需要填写空值才能在模型中使用数据。每次第一次出现类别时,它都是 NULL。我想要做的是,对于类别 A
和 B
这样具有多个值的情况,用该类别的平均值替换空值。对于仅出现一次的类别 C
,只需填写其余数据的平均值。
我知道我可以简单地对 C
这样的情况执行此操作以获取所有行的平均值,但我一直在尝试对 A 和 B 执行类别方式并替换空值。
df['value'] = df['value'].fillna(df['value'].mean())
我需要最终的df是这样的
id category value
1 A 6.25
2 B 1.0
3 A 10.5
4 C 4.15
5 A 2.0
6 B 1.0
我认为您可以使用列的所有值的 groupby
and apply
fillna
with mean
. Then get NaN
if some category has only NaN
values, so use mean
来填充 NaN
:
df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
id category value
0 1 A 6.25
1 2 B 1.00
2 3 A 10.50
3 4 C 4.15
4 5 A 2.00
5 6 B 1.00
您还可以使用 GroupBy
+ transform
以分组方式填充 NaN
值。这种方法避免了低效的apply
+ lambda
。例如:
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())