我有一个名为
MultiIndex
的 df
数据框,其中包含 3 indexes
(水果、颜色、味道)。我想搜索 1 个特定的 index
,即 index
是 Color
,看看其中是否存在 value
。
例如:代码看起来像这样。
Color
是数据框中的 index
,而不仅仅是一列。
if 'purple' in 'Color':
print('yes')
else:
print('no')
我只想搜索
Color
而不是任何其他indexes/columns
Quantity Quality
Fruit Color Taste
apple red tart 12 good
lemon yellow sour 11 average
grapes purple sweet 5 bad
lime green citrus 3 excellent
非常感谢您抽出时间!
您可以使用
get_level_values
进行过滤。
if "purple" in df.index.get_level_values('Color'):
print('yes')
else:
print('no')
如果您想要表格输出,可以使用它:
def check(data:pd.DataFrame,l:list):
c = data.index.get_level_values("Color").isin(l)
return np.where(c,'yes','no')
df['Result'] = check(df,['purple'])
print(df)
Quantity Quality Result
Fruit Color Type
apple red tart 12 good no
lemon yellow sour 11 average no
grapes purple sweet 5 bad yes
lime green citrus 3 excellent no
您还可以检查该值是否在
index.unique(level)
中。这样就不需要将整个索引复制到列表中。也可能会让后续的搜索更快。
if "purple" in df.index.unique(level="Color"):
print("yes")
else:
print("no")
我同意其他答案,即 df.index.get_level_values('level_name') 是正确的方法。然而,我认为更标准的 pandas 实现是使用矢量化方法返回布尔系列(当然这并不完全是 OP 所要求的):
is_purple = df.index.get_level_values('color') == 'purple' # <-- result is a boolean series
# Then filter as needed
only_purple = df[is_purple]
# Or use np.where to get yes/no strings if needed
df['Result'] = np.where(is_purple, 'yes', 'no')