Skip to main content
 首页 » 编程设计

python之Pandas 回填并填充不同的值

2025年05月04日18bluestorm

我想用不同/唯一的 ID 回填和填充空值,例如如果我有以下 DF

+----+------+ 
| Id | T_Id | 
+----+------+ 
|  1 | nan  | 
|  1 | nan  | 
|  1 | nan  | 
|  1 | 4    | 
|  1 | nan  | 
|  2 | nan  | 
|  2 | 5    | 
|  2 | 5    | 
|  2 | nan  | 
|  2 | nan  | 
|  2 | 6    | 
|  2 | 6    | 
|  2 | 6    | 
|  2 | nan  | 
|  2 | nan  | 
+----+------+ 

我想用与某些字符串配对的相同值填充每个非空值之前的空值,以便它表示值不为空之前的时间。最后一次出现的 ffill 以相同的方式填充。我想要的输出如下所示:

 
+----+------+ 
| Id | T_Id | 
+----+------+ 
|  1 | 4a   | 
|  1 | 4a   | 
|  1 | 4a   | 
|  1 | 4    | 
|  1 | 5a   | 
|  2 | 5a   | 
|  2 | 5    | 
|  2 | 5    | 
|  2 | 6a   | 
|  2 | 6a   | 
|  2 | 6    | 
|  2 | 6    | 
|  2 | 6    | 
|  2 | 6b   | 
|  2 | 6b   | 
+----+------+ 
 

请您参考如下方法:

我们可以做到:

w1=df['T_Id'].notna() 
s=w1.cumsum().shift() 
w2=s.eq(s.max()) 
df['T_Id']=df['T_Id'].bfill().ffill().astype(str) 
df['T_Id']=df['T_Id']+np.select([w1,w2,~(w1|w2)],['','b','a']) 

输出

print(df) 
    Id T_Id 
0    1   4a 
1    1   4a 
2    1   4a 
3    1    4 
4    1   5a 
5    2   5a 
6    2    5 
7    2    5 
8    2   6a 
9    2   6a 
10   2    6 
11   2    6 
12   2    6 
13   2   6b 
14   2   6b