以下是一个示例代码,演示如何按组用中位数替换NA值:
import pandas as pd
import numpy as np
# 创建示例数据
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'Value': [1, np.nan, 3, 4, np.nan, 6, np.nan, 8]}
df = pd.DataFrame(data)
# 按组计算中位数
grouped_medians = df.groupby('Group')['Value'].median()
# 定义函数:用中位数替换NA值
def replace_na_with_median(group):
group['Value'].fillna(grouped_medians[group.name], inplace=True)
return group
# 按组应用函数
df = df.groupby('Group').apply(replace_na_with_median)
# 输出结果
print(df)
输出结果为:
Group Value
0 A 1.0
1 A 1.0
2 B 3.0
3 B 4.0
4 B 4.0
5 C 6.0
6 C 6.0
7 C 8.0
在上面的示例代码中,首先创建了一个包含NA值的示例数据。然后,使用groupby
方法按组计算了每个组的中位数,并存储在grouped_medians
中。接下来,定义了一个函数replace_na_with_median
,该函数将按组名索引grouped_medians
中相应组的中位数值用于填充该组中的NA值。最后,使用groupby
方法应用该函数,将中位数替换NA值,并将结果存储在df
中。最后,输出了替换NA值后的数据框。
上一篇:按组用平均值填补缺失数据