df nan值的不同处理

问题描述

我有这样的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.ffillSeries.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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...