Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在DataFrame中选择具有特定值的列_Python_Pandas_Dataframe_Select - Fatal编程技术网

Python 在DataFrame中选择具有特定值的列

Python 在DataFrame中选择具有特定值的列,python,pandas,dataframe,select,Python,Pandas,Dataframe,Select,我的数据框中有一些列的值为0和1 name a b c d e 0 one 1 0 1 0 0 1 two 0 0 1 0 0 2 three 0 0 1 0 1 如何选择至少有一个值为1的列?但也必须选择另一列(即字符串或不仅取0和1值) 我试过这个表达 df.iloc[:, [(clm == 'name') | (1 in df[clm].unique()) for clm in

我的数据框中有一些列的值为0和1

    name    a   b   c   d   e
0   one     1   0   1   0   0
1   two     0   0   1   0   0
2   three   0   0   1   0   1
如何选择至少有一个值为1的列?但也必须选择另一列(即字符串或不仅取0和1值)

我试过这个表达

df.iloc[:, [(clm == 'name') | (1 in df[clm].unique()) for clm in df.columns]]

Out:
    name  a  c  e
0    one  1  1  0
1    two  0  1  0
2  three  0  1  1

但这似乎不太好,因为我显式选择了列“name”

如果可能的话,删除所有只有
0
值的列比较“值不相等”,并在以下列中为每列返回至少一个
True

详细信息

print (df.ne(0))
   name      a      b     c      d      e
0  True   True  False  True  False  False
1  True  False  False  True  False  False
2  True  False  False  True  False   True

print (df.ne(0).any())
name     True
a        True
b       False
c        True
d       False
e        True
dtype: bool

谢谢,这是一个很好的解决方案。如果要选择值为1的列,该怎么办?或者我有其他值的列,但我应该只对非字符串列应用条件?如果我想选择任何值为1的列
df.eq(1).any()
。如何选择“name”列?@sergzemsk未测试,我只打电话。但其中一个技巧应该是选择所有数字列,测试1,然后添加所有其他列和字符串。类似于
df=df.loc[:,df.选择数据类型(np.number).eq(1).any().reindex(df.columns,fill\u value=True)]
print (df.ne(0))
   name      a      b     c      d      e
0  True   True  False  True  False  False
1  True  False  False  True  False  False
2  True  False  False  True  False   True

print (df.ne(0).any())
name     True
a        True
b       False
c        True
d       False
e        True
dtype: bool