3 回答

TA贡献1859条经验 获得超6个赞
如果可能,通过reset_index以下方式创建默认索引值:
df = df.reset_index(drop=True)
out = df.index[df.item == 'alcohol'][0]
#generla solution if possible not matched values
out = next(iter(df.index[df.item == 'alcohol']), 'not matched')
使用任何索引值的解决方案:
out = next(iter(np.where(df.item == 'alcohol')[0]), 'not matched')
样本:
df = pd.DataFrame({'item': ['food','alcohol','drinks']}, index=[23,45,89])
print (df)
item
23 food
45 alcohol
89 drinks
#test your output
print (df.index[df.item == 'alcohol'][0])
45
#python counts from 0, so for second value get 1
out = next(iter(np.where(df.item == 'alcohol')[0]), 'not matched')
print (out)
1
#condition not matched, so returned empty DataFrame
out = next(iter(np.where(df.item == 'a')[0]), 'not matched')
print (out)
not matched

TA贡献1775条经验 获得超8个赞
使用pandas.Index.get_loc
IE
import pandas as pd
df = pd.DataFrame(columns = ['x'])
df.loc[10] = None
df.loc[20] = None
df.loc[30] = 1
print(df.index.get_loc(30))
>> 2

TA贡献1851条经验 获得超5个赞
过滤后使用索引:
df[df.item == 'alcohol'].index
Index(['row 2'], dtype='object')
如果您希望输出为2:
indices = df[df.item == 'alcohol'].index
indices.str[-1:]
Index(['2'], dtype='object')
如果想要一个列表:
indices.str[-1:].tolist()
['2']
如果行号超过 1 位,则使用:
indices.extract(r'(\d+)',expand=False)
初始设置:
df = pd.DataFrame({"index":[23,45,89],"item":['food','alcohol','drinks']},
index=['row 1','row 2','row 3'])
df
index item
row 1 23 food
row 2 45 alcohol
row 3 89 drinks
添加回答
举报