我想用不同/唯一的 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
