簡體   English   中英

pandas 數據框檢查多索引中是否存在索引

[英]pandas dataframe check if index exists in a multi index

我有一個 Pandas Dataframe,它有一個使用useriditemid列創建的多索引。 df 看起來像這樣

                  0     1     2
userid  itemid
007     5000      9     4     3
007     4000      6     7     1
009     3000      1     2     3

我想檢查索引 [007, 6000] 是否存在於數據幀 df 中。 我怎么能這樣做。 如果我運行以下代碼,則會出現錯誤TypeError: unhashable type: 'list'

if [007, 6000] in df.index:
    print('it works')

為此——

df

               0  1  2
userid itemid         
7      5000    9  4  3
       4000    6  7  1
9      3000    1  2  3

df.index.values
array([(7, 5000), (7, 4000), (9, 3000)], dtype=object)

您可以使用df.index.isin

df.index.isin([(7, 5000)])
array([ True, False, False], dtype=bool)

這為您提供了一個與可以找到該值的位置相對應的掩碼。 如果你只是想知道它是否存在與否,使用np.ndarray.any會同isin

df.index.isin([(7, 5000)]).any()
True

df.index.isin([(7, 6000)]).any()
False

使用Index.isin

df = df.index.isin([('007','5000')])
print (df)
[ True False False]

pd.MultiIndexlist並為您在存在list

代碼

import pandas as pd

mi = pd.MultiIndex.from_tuples(
    [(7, 5000), (7, 4000), (8, 3000)], names=['usedId', 'itemId'])
df = pd.DataFrame([[9, 4, 3], [6, 7, 1], [1, 2, 3]], index=mi)

print('df:', df, sep='\n', end='\n\n')
print('mi:', mi, sep='\n', end='\n\n')

print('Check for elements in Multi-Index:')
print('\t(7, 4000) in mi.to_list():', (7, 4000) in mi.to_list())
print('\t(7, 99) in mi.to_list():', (7, 99) in mi.to_list())

輸出

df:
               0  1  2
usedId itemId         
7      5000    9  4  3
       4000    6  7  1
8      3000    1  2  3

mi:
MultiIndex([(7, 5000),
            (7, 4000),
            (8, 3000)],
           names=['usedId', 'itemId'])

Check for elements in Multi-Index:
    (7, 4000) in mi.to_list(): True
    (7, 99) in mi.to_list(): False

暫無
暫無

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

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