РЕДАКТИРОВАТЬ:
Решение Pandas - сначала изменить форму на DataFrame.stack
, затем удалить второй уровень MultiIndex
и последний фильтр index
значения:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,'Car Type',0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')
})
print (df)
A B C D E F
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 Car Type 2 b
5 f 4 3 0 4 b
r = df.stack().reset_index(level=1, drop=True) == 'Car Type'
out = next(iter(r.index[r]), 'no match')
print (out)
4
Numpy решение лучше, если важна производительность:
Вы можете получить позицию первых соответствующих значений индекса, сравнив 2d numpy массив с numpy.where
, а затем используйте next
сiter
для возможных возвращаемых значений по умолчанию, если не совпадают значения:
r, c = np.where(df.values == 'Car Type')
out = next(iter(r), 'no match')
Если не значения индекса по умолчанию:
out = next(iter(df.index[r]), 'no match')