尝试获取某些列为零而其他列不为零的列。你知道吗
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']
数据帧:
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
我试过:
df[((df[zero]==0).any(axis=1))&((df[nozero]!=0).any(axis=1))]
这给了
t t2 t3 t4
1 0.0 0 0.0 NaN
2 0.0 2 0.0 2.0
也尝试过:
df[((df[zero]==0)&(df[nozero]!=0)).any(axis=1)]
它给出了一个空的数据帧。你知道吗
期望值:
t t2 t3 t4
2 0.0 2 0.0 2.0
任何帮助都会很好。谢谢。你知道吗
编辑澄清:
我需要两个条件(ALL)都为真(zero==0和nozero!=0),但如果行中有任何一对为真,则我需要该行。你知道吗
例如,从以下数据帧:
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
我只想要第2行,因为任意(t,t2)是零,而z3不是零。你知道吗
编辑澄清:
下面的代码生成我想要保留的行(index=2)。有没有比这更有效的方法使用任何或全部?(因为这需要追加行、分配内存、循环等)
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)])
由于无法使用.any或.all获得所需的行,我编写了一个变通代码。如果你能找到任何更有效的方法而不在列中循环,请告诉我。感谢所有的帮助@Ananay Mital,@m42op64,@coldspeed。你知道吗
输出
根据您与@coldspeed的讨论,您使用的数据帧看起来更像
在转换了@coldspeed suggered这样的数据类型之后,您可以继续使用它来选择所需的数据。你知道吗
第一个条件
(df[zero]==0).all(1)
查找zero
列中0
(all(1)
告诉pandas按列减少)的所有值。第二个条件在nozero
列中找到任何不为零的值,正如@Ananay所说,这些值包括NaN
。你知道吗就像@Ananay在他们的回答中所说的,您可以通过使用
dropna()
删除带有NaN
值的行,这样最终的结果就是我还建议阅读更多关于^{} 和^{} 方法的内容。你知道吗
编辑
我能做到
但我不知道你想不想说得那么具体。问题只是为我以前的方法找到正确的布尔条件。我们希望第3行返回True,其他行返回False。您可以尝试将此问题重命名为“布尔索引以根据列列表的条件查找值”或搜索该问题。你知道吗
我想是因为南。
NaN != 0 is True
相关问题 更多 >
编程相关推荐