<p>根据您与@coldspeed的讨论,您使用的数据帧看起来更像</p>
<pre><code> t t2 t3 t4
0 0.0 0.0 1.0 0.0
1 0.0 0.0 0.0 NaN
2 0.0 2.0 0.0 2.0
3 NaN 3.0 NaN 3.0
4 0.0 1.0 0.0 0.0
</code></pre>
<p>在转换了@coldspeed suggered这样的数据类型之后,您可以继续使用它来选择所需的数据。你知道吗</p>
<pre><code>In [193]: df[((df[zero] == 0).all(1) & (df[nozero] != 0).any(1))]
Out[193]:
t t2 t3 t4
1 0.0 0.0 0.0 NaN
2 0.0 2.0 0.0 2.0
4 0.0 1.0 0.0 0.0
</code></pre>
<p>第一个条件<code>(df[zero]==0).all(1)</code>查找<code>zero</code>列中<code>0</code>(<code>all(1)</code>告诉pandas按列减少)的所有值。第二个条件在<code>nozero</code>列中找到任何不为零的值,正如@Ananay所说,这些值包括<code>NaN</code>。你知道吗</p>
<p>就像@Ananay在他们的回答中所说的,您可以通过使用<code>dropna()</code>删除带有<code>NaN</code>值的行,这样最终的结果就是</p>
<pre><code>In [194]: df[((df[zero] == 0).all(1) & (df[nozero] != 0).any(1))].dropna()
Out[194]:
t t2 t3 t4
2 0.0 2.0 0.0 2.0
4 0.0 1.0 0.0 0.0
</code></pre>
<p>我还建议阅读更多关于<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html" rel="nofollow noreferrer">^{<cd9>}</a>和<a href="https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.all.html" rel="nofollow noreferrer">^{<cd10>}</a>方法的内容。你知道吗</p>
<p><strong>编辑</p>
<p>我能做到</p>
<pre><code>df[((df['t']==0) | (df['t2']==0)) & (df['z3']!=0)]
</code></pre>
<p>但我不知道你想不想说得那么具体。问题只是为我以前的方法找到正确的布尔条件。我们希望第3行返回True,其他行返回False。您可以尝试将此问题重命名为“布尔索引以根据列列表的条件查找值”或搜索该问题。你知道吗</p>