如何根据该列中每个 class 的平均值填充 pandas 中每一列的 nan 值
How to fill nan values of each column in pandas with respect to the average of each class in that column
我在 pandas 中有一个数据集(比如两个 class)。
index | length | weight | label
-------|--------|--------|-------
0 1 2 0
1 2 3 0
2 nan 4 0
3 6 nan 0
4 30 40 1
5 45 35 1
6 18 nan 1
df.fillna(df.mean())
returns 一个数据帧,每个 nan 由每一列填充。但我想用其 class 的平均值填充每一列中的每个 nan,因此索引 2 处的长度为 3。输出如下所示:
index | length | weight | label
-------|--------|--------|-------
0 1 2 0
1 2 3 0
2 3 4 0
3 6 3 0
4 30 40 1
5 45 35 1
6 18 37.5 1
有简单的功能还是自己实现?
将 GroupBy.transform
与 mean
一起用于助手 Dataframe
,每个组均值并传递给 fillna
:
df = df.fillna(df.groupby('label').transform('mean'))
print (df)
length weight label
0 1.0 2.0 0
1 2.0 3.0 0
2 3.0 4.0 0
3 6.0 3.0 0
4 30.0 40.0 1
5 45.0 35.0 1
6 18.0 37.5 1
详情:
print (df.groupby('label').transform('mean'))
length weight
0 3.0 3.0
1 3.0 3.0
2 3.0 3.0
3 3.0 3.0
4 31.0 37.5
5 31.0 37.5
6 31.0 37.5
我在 pandas 中有一个数据集(比如两个 class)。
index | length | weight | label
-------|--------|--------|-------
0 1 2 0
1 2 3 0
2 nan 4 0
3 6 nan 0
4 30 40 1
5 45 35 1
6 18 nan 1
df.fillna(df.mean())
returns 一个数据帧,每个 nan 由每一列填充。但我想用其 class 的平均值填充每一列中的每个 nan,因此索引 2 处的长度为 3。输出如下所示:
index | length | weight | label
-------|--------|--------|-------
0 1 2 0
1 2 3 0
2 3 4 0
3 6 3 0
4 30 40 1
5 45 35 1
6 18 37.5 1
有简单的功能还是自己实现?
将 GroupBy.transform
与 mean
一起用于助手 Dataframe
,每个组均值并传递给 fillna
:
df = df.fillna(df.groupby('label').transform('mean'))
print (df)
length weight label
0 1.0 2.0 0
1 2.0 3.0 0
2 3.0 4.0 0
3 6.0 3.0 0
4 30.0 40.0 1
5 45.0 35.0 1
6 18.0 37.5 1
详情:
print (df.groupby('label').transform('mean'))
length weight
0 3.0 3.0
1 3.0 3.0
2 3.0 3.0
3 3.0 3.0
4 31.0 37.5
5 31.0 37.5
6 31.0 37.5