python - 选择 Pandas 中特定值后面包含 NaN 的行

标签 python pandas dataframe

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

要获取下面所有的 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,尽管由于 'Mode' 中的 NaN (它),这可能并不总是有效。似乎适用于上述位)

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

关于python - 选择 Pandas 中特定值后面包含 NaN 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52041963/

相关文章:

使用 15000 行数据集查找最小列值的 Python 代码

python - 如何在 Python 中使用 Pivot_Table 操作 Dataframe

python - 如何让 Pandas 在不同颜色下表现出色

python - DataFrame 合并以排除额外的索引列

python - 我想使用我选择的 python3 的 virtualenv,比如 python3.6

python - 将字符串打印为 HTML

python - Pandas :从匹配第一个元素的元组列表中创建列

python - 计算在 python 中只有列和多行的数据框的编辑距离

javascript - 你如何在 NW.js 中链接 node.js 的 STDOUT 和 python 的 STDIN

python - 过滤 Pandas 中的数据帧以获取列名包含模式的多列