从表中返回列名,在该表中使用python和pandas在任何行中都找到了特定值

时间:2019-03-08 14:56:51

标签: python pandas dataframe

表中的值是不同的。但是,其他行(第一行=标题/列名)的其他列中的值相等:

|---------------------|------------------|------------------|
|          A          |     B            |     C            |
|---------------------|------------------|------------------|
|          100        |     200          |     300          |
|---------------------|------------------|------------------|
|          400        |     100          |     500          |
|---------------------|------------------|------------------|
|          600        |     700          |     800          |
|---------------------|------------------|------------------|

要打印所有具有特定值(例如100)的行,请使用以下python代码:

import pandas as pd

df = pd.read_excel('test.xlsx', sheet_name='test1')

dfObject = df[df.isin([100]).any(axis=1)]

print(dfObject)

重新产生这样的输出:

|---------------------|------------------|------------------|
|          A          |     B            |     C            |
|---------------------|------------------|------------------|
|          100        |     200          |     300          |
|---------------------|------------------|------------------|
|          400        |     100          |     500          |
|---------------------|------------------|------------------|

有什么办法可以只打印特定值所在的列名,就像这样(也可以有区别):

|---------------------|
|          A          |
|---------------------|
|          B          |
|---------------------|

2 个答案:

答案 0 :(得分:3)

IIUC,使用:

df.columns[df.eq(100).any()]

#Index(['A', 'B'], dtype='object')

要获取系列输出,请调用pd.Series()pd.Series(df.columns[df.eq(100).any()])

答案 1 :(得分:1)

是的,只需使用columns属性,如下所示:

df[df.isin([100]).any(axis=1)].columns