我正在尝试创建一个新的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。
答案 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
要获取下面的所有1
和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,尽管由于NaN
中的'Mode'
可能并不总是有效(这似乎对上面的位有效)
df[((df['Mode'].isnull()) & df['Mode'].ffill()) | df.Mode]