选择在熊猫中包含NaN且遵循特定值的行

时间:2018-08-27 14:55:11

标签: python pandas dataframe

我正在尝试创建一个新的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。

1 个答案:

答案 0 :(得分:2)

您可以使用.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

要获取下面的所有1NaN

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,尽管由于NaN中的'Mode'可能并不总是有效(这似乎对上面的位有效)

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