繁体   English   中英

在 Pandas 中选择包含跟随特定值的 NaN 的行

[英]Select rows containing a NaN following a specific value in Pandas

我正在尝试创建一个新的 DataFrame,其中包含与最后一列中的值 1.0 或 NaN 相对应的行,由此我只将 Nans 取到 1.0 以下(也就是说,我对所有内容都感兴趣,直到出现 0.0)。

Timestamp      Value         Mode    
00-00-10   34567  1.0  
00-00-20   45425     
00-00-30   46773  0.0  
00-00.40   64567   
00-00-50   25665  1.0  
00-00-60   25678  

我的尝试是:

for row in data.itertuples():
while data[data.Mode != 0.0]:
    df2 = df2.append(row)
else:
    #How do I differentiate between a NaN under a 1.0 and a NaN under a 0.0?
print (df2)

这个想法是保存每一行直到 0.0 出现,然后忽略每一行直到 1.0 再次出现。

您可以使用.ffill来确定它是低于 1 还是低于 0 的NaN

这是低于 1 的NaN

df[(df['Mode'].isnull()) & df['Mode'].ffill() == 1]
#  Timestamp  Value  Mode
#1  00-00-20  45425   NaN
#5  00-00-60  25678   NaN

要获得以下所有1 s 和NaN

df[((df['Mode'].isnull()) & df['Mode'].ffill() == 1) | df.Mode == 1]
#  Timestamp  Value  Mode
#0  00-00-10  34567   1.0
#1  00-00-20  45425   NaN
#4  00-00-50  25665   1.0
#5  00-00-60  25678   NaN

您可以使用稍微更好的逻辑,因为您只有 1 和 0,尽管由于'Mode'NaN ,这可能并不总是有效(它似乎适用于上述位)

df[((df['Mode'].isnull()) & df['Mode'].ffill()) | df.Mode]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM