在整个数据帧中搜索变量,并返回第一次出现的片段

时间:2019-02-20 16:11:31

标签: python pandas dataframe search

我正在数据框中搜索一些变量,并希望每个变量首次出现的索引。

样本数据:

enter image description here

因此,我希望第4列中的数字与第一次出现的行值相对应。例如:“级别1”列中的“自费”或“级别2”中首次出现的“医疗补助”。该代码适用于:

    idx = (df['Level 1'] == 'Out of pocket').idxmax()

但是有一种方法可以执行此操作,而无需指定希望熊猫在其中查找的列。而是在整个数据框中搜索第一次出现的情况。

1 个答案:

答案 0 :(得分:2)

您可以使用iterrows来访问每一行的索引和值。

创建虚拟数据框 df = pd.DataFrame([[1, 'a', '!'], [3, 'b', '?'], [5, 'c', '#'], [7, 'c', '#']], columns=['A', 'B', 'C'])如下:

    A   B   C
0   1   a   !
1   3   b   ?
2   5   c   #
3   7   c   #

我们可以用iterrows编写一个for循环并检查该行的值,在这种情况下,列B等于'c'并且列C等于'#',并打印索引第一次出现是这样的:

for index, row in df.iterrows():
    if (row.B == 'c') & (row.C == '#'):
        print(index)
        break

这将返回我们:2

或专门为您:

for index, row in df.iterrows():
    if (row['Level 1'] == 'Health Insurance') & (row['Level 2'] == 'Medicare'):
        print(index)
        break

希望这会有所帮助!

编辑:无需指定列名:

为了不需要指定列名,我们可以遍历每行中的值。我将其包装在一个函数中,因为这是我知道的打破嵌套循环的唯一方法,但是我敢肯定,可以对此进行改进。

def look_for_word(word='Medicare', df=df):
    for index, row in df.iterrows():
        for val in row:
            if val == word:
                return df['YOUR FOURTH COLUMN NAME'].iloc[index]

print(look_for_word(word='Medicare', df=df))