对 df 的 nan 值的不同处理

different handling of nan values of a df

我有一个这样的 df:

      A    B 
 0    1    5
 1    1    7
 2  NaN  NaN
 3    1    8
 4  NaN  NaN
 5  NaN  NaN
 6    2    6
 7    2    2
 8  NaN  NaN
 9  NaN  NaN
10    2    3

现在我想在事件中以不同于外部的方式填充 nan 值。一个事件由 A 列标识并且具有相同的值(在我的示例中有事件 1 和 2)。 A 列应仅包含事件中的事件编号。对于 B 列,应传输事件中的最后一个条目。 在事件之间,NaN 值应设置为“0”。

我尝试了 ffill()fillna(),但不符合我的条件。

预期结果:

      A    B 
 0    1    5
 1    1    7
 2    1    7
 3    1    8
 4    0    0
 5    0    0
 6    2    6
 7    2    2
 8    2    2
 9    2    2
10    2    3

感谢您的帮助:)

您可以使用 GroupBy.ffill with helper groups created by Series.mask 并通过回溯值进行比较以防止组间遗漏值,最后将缺失值替换为 0 和整数:

s = df.A.ffill()
g = df.A.mask(s.eq(df.A.bfill()), s)
df = df.groupby(g).ffill().fillna(0).astype(int)
print (df)
    A  B
0   1  5
1   1  7
2   1  7
3   1  8
4   0  0
5   0  0
6   2  6
7   2  2
8   2  2
9   2  2
10  2  3