首页 > 解决方案 > 用该组中的第一个非空值填充组中的所有值

问题描述

以下是我拥有的熊猫数据框:

cluster Value
1         A
1        NaN
1        NaN
1        NaN
1        NaN
2        NaN
2        NaN
2         B
2        NaN
3        NaN
3        NaN
3         C
3        NaN
4        NaN
4         S
4        NaN
5        NaN
5         A
5        NaN
5        NaN

如果我们查看数据,集群 1 的一行具有值“A”,并且仍然是 NA 值。我想为集群 1 的所有行填充“A”值。对于所有集群也是如此。基于集群的值之一,我想填充集群的剩余行。输出应该是这样的,

cluster Value
1         A
1         A
1         A
1         A
1         A
2         B
2         B
2         B
2         B
3         C
3         C
3         C
3         C
4         S
4         S
4         S
5         A
5         A
5         A
5         A

我是 python 新手,不知道如何继续。有人可以帮忙吗?

标签: pythonpandasdataframenan

解决方案


groupby+bfillffill

df = df.groupby('cluster').bfill().ffill()
df

    cluster Value
0         1     A
1         1     A
2         1     A
3         1     A
4         1     A
5         2     B
6         2     B
7         2     B
8         2     B
9         3     B
10        3     B
11        3     C
12        3     C
13        4     S
14        4     S
15        4     S
16        5     A
17        5     A
18        5     A
19        5     A

或者,

groupby+transformfirst

df['Value'] = df.groupby('cluster').Value.transform('first')
df

    cluster Value
0         1     A
1         1     A
2         1     A
3         1     A
4         1     A
5         2     B
6         2     B
7         2     B
8         2     B
9         3     B
10        3     B
11        3     C
12        3     C
13        4     S
14        4     S
15        4     S
16        5     A
17        5     A
18        5     A
19        5     A

推荐阅读