当行元素符合条件Pandas时查找列名称

时间:2016-12-22 17:48:45

标签: python pandas indexing

这是一个基本问题。我有一个方形数组,行和列总结。例如:

df = pd.DataFrame([[0,0,1,0], [0,0,1,0], [1,0,0,0], [0,1,0,0]], index = ["a","b","c","d"], columns = ["a","b","c","d"])
df["sumRows"] = df.sum(axis = 1)
df.loc["sumCols"] = df.sum()

返回:

In [100]: df
Out[100]: 
         a  b  c  d  sumRows
a        0  0  1  0        1
b        0  0  1  0        1
c        1  0  0  0        1
d        0  1  0  0        1
sumCols  1  1  2  0        4

我需要找到与之匹配的sumCols行的列标签。目前我正在这样做:

[df.loc["sumCols"] == 0].index

但是这会返回一个奇怪的索引类型对象。我想要的是一个符合这个标准的值列表,例如:[' d']在这种情况下。

3 个答案:

答案 0 :(得分:4)

有两种方法(索引对象可以像列表一样转换为可交换的)。

使用列来执行此操作:

columns = df.columns[df.sum()==0]
columns = list(columns)

或者您可以旋转Dataframe并将列视为行:

list(df.T[df.T.sumCols == 0].index)

答案 1 :(得分:2)

您可以使用ERR_SSL_PROTOCOL_ERROR 表达式来过滤系列,如果您想要列表而不是索引作为结果,则可以在索引对象上调用lambda

.tolist()

或者:

(df.loc['sumCols'] == 0)[lambda x: x].index.tolist()
# ['d']

如果没有明确创建df.loc['sumCols'][lambda x: x == 0].index.tolist() # ['d'] ,如果要检查哪个列的总和为零,则可以执行以下操作:

sumCols

检查行:

df.sum()[lambda x: x == 0].index.tolist()
# ['d']

注意:df.sum(axis = 1)[lambda x: x == 0].index.tolist() # [] 表达式方法与用于子集化,功能样式的矢量化方法一样快,如果您愿意,可以在单行中轻松编写。

答案 2 :(得分:2)

转换后使用查询的简单方法

df.T.query('sumCols == 0').index.tolist()