Python 在pandas中有条件地返回列
我已经阅读了很多关于在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
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