根据值分组填充空值

Fill nulls based on a group by value

我有以下df

id1 id2  uid . . . 
 1  100   na
 1  101 1000
 1  101 1000
 2  102 1001
 2  103   na
 3  104 1002
 3  104 1002
 3  104 1002
 3  104   na
 3  105   na
 3  106   na

我想按 id1 分组并填写 uid

我尝试使用以下代码段进行 min/max 填充:

 `df['uid'] = df.groupby(['id1']).transform(lambda x: x.fillna(x.max()))`

填充 na min 或 max 应该以任何一种方式工作,因为每个 id1 应该有一个不同的 uid,但是它返回不同的值,所以它可能会妨碍我填充值

期望的输出:

id1 id2  uid . . . 
 1  100 1000
 1  101 1000
 1  101 1000
 2  102 1001
 2  103 1001
 3  104 1002
 3  104 1002
 3  104 1002
 3  104 1002
 3  105 1002
 3  106 1002

尝试使用x.ffill().bfill():

df = pd.DataFrame(
    {'id1': [1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3], 'id2': [100, 101, 101, 102, 103, 104, 104, 104, 104, 105, 106],
     'uid': [np.nan, 1000, 1000, 1001, np.nan, 1002, 1002, 1002, np.nan, np.nan, np.nan]}, dtype='object')
df['uid'] = df.groupby(['id1']).uid.transform(lambda x: x.ffill().bfill()).astype(int)
print(df)

打印:

   id1  id2   uid
0    1  100  1000
1    1  101  1000
2    1  101  1000
3    2  102  1001
4    2  103  1001
5    3  104  1002
6    3  104  1002
7    3  104  1002
8    3  104  1002
9    3  105  1002
10   3  106  1002