我正在数据框中搜索一些变量,并希望每个变量首次出现的索引。
样本数据:
因此,我希望第4列中的数字与第一次出现的行值相对应。例如:“级别1”列中的“自费”或“级别2”中首次出现的“医疗补助”。该代码适用于:
idx = (df['Level 1'] == 'Out of pocket').idxmax()
但是有一种方法可以执行此操作,而无需指定希望熊猫在其中查找的列。而是在整个数据框中搜索第一次出现的情况。
答案 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))