尝试有条件地填充数据帧中的 NaN,基于: 1. A 上的值(通过分组完成( 2. 在 groupby(A( 中,如果值是 nan 并且是第一个,则填充
为零,然后填充(示例中 A=a(
3. 在 groupby(A( 中,如果值是 nan 并且不是第一个,则 bfill (示例中 A=b(
4. 内部分组(A(, 如果值为 nan,但没有要遵循的数据点,则 ffill (示例中为 A=c(
我闻到了三元+lambda的味道,但想要一种pythonic的编写方式。
基本上,起点是:
df
A B
0 a NaN
1 a NaN
2 a 3.0
3 a 4.0
4 b 4.0
5 b NaN
6 b 6.0
7 b 6.0
8 c 7.0
9 c NaN
10 c NaN
而df应该变成:
df
A B
0 a 0.0
1 a 0.0
2 a 3.0
3 a 4.0
4 b 4.0
5 b 6.0
6 b 6.0
7 b 6.0
8 c 7.0
9 c 7.0
10 c 7.0
我们可以做GroupBy.ffill
,然后我们确定每个组中间结果都正确填写,之后我们可以用0
做一个Series.fillna
,因为这些是唯一剩下的值:
df['B'] = df.groupby('A')['B'].ffill().fillna(0)
A B
0 a 0.0
1 a 0.0
2 a 3.0
3 a 4.0
4 b 4.0
5 b 4.0
6 b 6.0
7 b 6.0
8 c 7.0
9 c 7.0
10 c 7.0