选择其中两个特定列都不为空的行

时间:2019-11-16 00:24:51

标签: python pandas

我本质上是想这样做

mrgd.query('security == security and comnam == comnam')

但这总是错误的。

或者我在想也许我可以做

mrgd.eval('security == security') & mrgd.eval(comnam == comnam')

但这不起作用。

mrgd['security'].notnull() == mrgd['comnam'].notnull()

我想我可以做到

mrgd[['security','comnam']].notnull()

,然后对生成的两列求和以得到一个整数(2表示成功),但是传统的实现方式是什么?我发现了与此类似但又不太一样的问题。

2 个答案:

答案 0 :(得分:2)

我认为您可以这样做:

import pandas as pd

df = pd.DataFrame(
    [[None, None], 
     [3, None], 
     [None, 2], 
     [2, 3]], 
    columns=['security', 'comnam',],
)
df[df['security'].notnull() & df['comnam'].notnull()]

结果是:

  security  comnam
3   2.0 3.0

我尝试过:

df.query('security == security and comnam == comnam')

结果是一样的。

答案 1 :(得分:1)

推荐的方法是使用isnanotnaisnullnotnull。在检查两列时,只需在all上附加其他axis=1

检查两列均为非NaN

mrgd[['security','comnam']].notna().all(1)

检查两列均为非NaN

mrgd[['security','comnam']].notna().any(1)