回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>尝试获取某些列为零而其他列不为零的列。你知道吗</p>
<pre><code>import pandas as pd
import numpy as np
df=pd.DataFrame({'t':[0,0,0,np.nan],'t2':[0,0,2,3],'t3':[1,0,0,np.nan],'t4':[0,np.nan,2,3]})
zero=['t','t3']
nozero=['t2','t4']
</code></pre>
<p>数据帧:</p>
<pre><code> t t2 t3 t4
0 0.0 0 1.0 0.0
1 0.0 0 0.0 NaN
2 0.0 2 0.0 2.0
3 NaN 3 NaN 3.0
</code></pre>
<p>我试过:</p>
<pre><code>df[((df[zero]==0).any(axis=1))&((df[nozero]!=0).any(axis=1))]
</code></pre>
<p>这给了</p>
<pre><code> t t2 t3 t4
1 0.0 0 0.0 NaN
2 0.0 2 0.0 2.0
</code></pre>
<p>也尝试过:</p>
<pre><code>df[((df[zero]==0)&(df[nozero]!=0)).any(axis=1)]
</code></pre>
<p>它给出了一个空的数据帧。你知道吗</p>
<p>期望值:</p>
<pre><code> t t2 t3 t4
2 0.0 2 0.0 2.0
</code></pre>
<p>任何帮助都会很好。谢谢。你知道吗</p>
<p>编辑澄清:</p>
<p>我需要两个条件(ALL)都为真(zero==0和nozero!=0),但如果行中有任何一对为真,则我需要该行。你知道吗</p>
<p>例如,从以下数据帧:</p>
<pre><code>df = pd.DataFrame({'t': [0, 0, 11,0], 't2': [0, 0, 0, 0], 'z3': [0, 0, 12, 0], 't4': [0, 0, 2, 0],
't5': [0, 0, 0, 0], 'z6': [0, 0, 4, 0], 't7': [1, 1, 0, 1], 't8': [1, 1, 0, 1],
'z9': [1, 1, 0, 1], 't10': [1, 1, 0, 1], 't11': [1, 1, 0, 1], 'z12': [1, 1, 0, 1]})
nozero=['z3','z6','z9','z12']
zero=list(set(df.columns)-set(nozero))
t t2 z3 t4 t5 z6 t7 t8 z9 t10 t11 z12
0 0 0 0 0 0 0 1 1 1 1 1 1
1 0 0 0 0 0 0 1 1 1 1 1 1
2 11 0 12 2 0 4 0 0 0 0 0 0
3 0 0 0 0 0 0 1 1 1 1 1 1
</code></pre>
<p>我只想要第2行,因为任意(t,t2)是零,而z3不是零。你知道吗</p>
<p>编辑澄清:</p>
<p>下面的代码生成我想要保留的行(index=2)。有没有比这更有效的方法使用任何或全部?(因为这需要追加行、分配内存、循环等)</p>
<pre><code>import pandas as pd
df = pd.DataFrame({'t': [0, 0, 11,0], 't2': [0, 0, 0, 0], 'z3': [0, 0, 12, 0], 't4': [0, 0, 2, 0],
't5': [0, 0, 0, 0], 'z6': [0, 0, 4, 0], 't7': [1, 1, 0, 1], 't8': [1, 1, 0, 1],
'z9': [1, 1, 0, 1], 't10': [1, 1, 0, 1], 't11': [1, 1, 0, 1], 'z12': [1, 1, 0, 1]})
nozero=['z3','z6','z9','z12']
zero1=['t','t4','t7','t10']
zero2=['t2','t5','t8','t11']
for x,y,z in zip(zero1, zero2, nozero):
print(df[((df[x]==0) | (df[y]==0)) & (df[z]!=0)])
</code></pre>