![](/img/trans.png)
[英]Pandas: How select rows by multiple criteria (if not nan and equals to specific value)
[英]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.