簡體   English   中英

pandas 檢查 MultiIndex 中的一個特定索引中是否存在值 dataframe

[英]pandas check if value exists in one specific index in a MultiIndex dataframe

我有一個名為dfMultiIndex數據框,其中包含 3 個indexes (水果、顏色、味道)。 我想搜索 1 個特定的index ,該indexColor並查看該value是否存在於其中。

例如:代碼看起來像這樣。 Color是 dataframe 中的一個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

非常感謝您的參與!

試試xs從 DataFrame 中抓取一個橫截面:

df.xs('purple', level=1, drop_level=False)
                     Quantity Quality
Fruit  Color  Type                   
grapes purple sweet         5     bad

只是為了測試它是否存在檢查橫截面是否為empty

df.xs('purple', level=1).empty
if not df.xs('purple', level=1).empty:
    print('yes')
else:
    print('no')

或者reset_index並使用any查看是否有任何匹配項:

df.reset_index('Color')['Color'].eq('purple').any()
True
if df.reset_index('Color')['Color'].eq('purple').any():
    print('yes')
else:
    print('no')

如果你想要一個表格 output,你可以使用它:

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

您可以使用get_level_values進行過濾。

if "purple" in df.index.get_level_values('Color'):
    print('yes')
else:
    print('no')

您還可以檢查該值是否在index.unique(level)中。 這樣就不需要將整個索引復制到列表中。 它還可能使后續搜索更快。

if "purple" in df.index.unique(level="Color"): 
    print("yes")
else: 
    print("no")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM