我正在尝试创建一个新的 DataFrame,其中包含与最后一列中的值 1.0 或 NaN 相对应的行,因此我只采用 1.0 以下的 Nans(也就是说,我对所有内容都感兴趣,直到出现 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
和 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]
关于python - 选择 Pandas 中特定值后面包含 NaN 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041963/