Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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 在pandas中有条件地返回列_Python_Pandas - Fatal编程技术网

Python 在pandas中有条件地返回列

Python 在pandas中有条件地返回列,python,pandas,Python,Pandas,我已经阅读了很多关于在python中使用pandas索引的问题和答案,但我无法解决如何有条件地返回列。例如,考虑以下内容: import pandas as pd df = pd.DataFrame([[0,1,1],[0,0,1],[0,0,0]], columns=['a','b','c']) print(df) a b c 0 0 1 1 1 0 0 1 2 0 0 0 df.columns[(df.loc[:1] == 1).all()] df.colum

我已经阅读了很多关于在python中使用pandas索引的问题和答案,但我无法解决如何有条件地返回列。例如,考虑以下内容:

import pandas as pd
df = pd.DataFrame([[0,1,1],[0,0,1],[0,0,0]], columns=['a','b','c'])
print(df)

   a  b  c
0  0  1  1
1  0  0  1
2  0  0  0
df.columns[(df.loc[:1] == 1).all()]
df.columns[(df.loc[[0, 2]] == 1).all()]
我如何要求pandas给我列名称,使第0行的值和该列的值为1?预期输出:
['b','c']

我如何要求pandas给我列名,使该列第0行和第1行的值为1?预期输出:
['c']


我很乐意使用
.loc
查找特定条件为真的所有行,但这略有不同。

@padraiccningham在评论中提供了一个解决方案。这很简单:

df.columns[df.loc[0] == 1]
如果我只想选择满足两个(或更多条件)的列,可以在如下语句中列出:

import pandas as pd
df = pd.DataFrame([[0,1,1],[0,0,1],[0,0,0]], columns=['a','b','c'])
print(df)

   a  b  c
0  0  1  1
1  0  0  1
2  0  0  0
df.columns[(df.loc[:1] == 1).all()]
df.columns[(df.loc[[0, 2]] == 1).all()]

前者返回除最后一行以外的所有行的值均为1的列。后者返回第一行和第三行(标记为0和2)取值为1的列。我的错误是试图用df做这件事。loc

@PadraicCunningham在评论中提供了一个解决方案。这很简单:

df.columns[df.loc[0] == 1]
如果我只想选择满足两个(或更多条件)的列,可以在如下语句中列出:

import pandas as pd
df = pd.DataFrame([[0,1,1],[0,0,1],[0,0,0]], columns=['a','b','c'])
print(df)

   a  b  c
0  0  1  1
1  0  0  1
2  0  0  0
df.columns[(df.loc[:1] == 1).all()]
df.columns[(df.loc[[0, 2]] == 1).all()]

前者返回除最后一行以外的所有行的值均为1的列。后者返回第一行和第三行(标记为0和2)取值为1的列。我的错误是试图用
df.loc

执行此操作,您的意思是
df.columns[df.loc[0]==1];df.columns[(df.loc[:1]==1.all()]
?谢谢@padraickenningham!为了让它更一般一点,如果我切换了第1行和第2行,这样您就不能像在第二个代码段中那样对其进行切片,该怎么办?我可以使用
df.loc[:1]
,而不是
df.loc[[0,2]]]
,或者类似的东西吗?你是指第一行和第三行?是的,对不起--,也就是说,我想要第一行和第三行都有一行的列,即使示例中没有这样的行。使用
df.columns[(df.loc[[0,2]]==1)。all()
将返回
[]
使用您当前的df您的意思是
df.columns[df.loc[0]==1];df.columns[(df.loc[:1]==1.all()]
?谢谢@padraickenningham!为了让它更一般一点,如果我切换了第1行和第2行,这样您就不能像在第二个代码段中那样对其进行切片,该怎么办?我可以使用
df.loc[:1]
,而不是
df.loc[[0,2]]]
,或者类似的东西吗?你是指第一行和第三行?是的,对不起--,也就是说,我想要第一行和第三行都有一行的列,即使示例中没有这样的行。使用
df.columns[(df.loc[[0,2]]==1)。all()
将返回
[]
使用您当前的df