iloc 有条件的按熊猫填充分组



尝试有条件地填充数据帧中的 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

最新更新