首页 > 解决方案 > Python Pandas:检查列表中的项目是否在 df 索引中,其中 df 是多索引 df

问题描述

我有一个多索引数据框:

                       colname        ... TemporaryFix
ID1   ID2    ID3                              
a      NA    1         New Sector  ...             
b      NA    20        Market Sector  ...             
c      NA    5         Market Sector  ...             
d      NA    5         Other Sector  ...             
e      a27   55        Market Sector  ...             

我有一个列名和相应的索引列表。

cname = 'Market Sector'
lindex = [('b', NA, 20), ('d', NA, 5)

我想在“TemporaryFix”列中输入“yes”,其中索引在列表中,colname 等于 cname。

Desired output:
                       colname        ... TemporaryFix
ID1   ID2    ID3                               
a      NA    1         New Sector  ...             
b      NA    20        Market Sector  ... yes            
c      NA    5         Market Sector  ...             
d      NA    5         Other Sector  ...             
e      a27   55        Market Sector  ...

写了以下内容(在Python Pandas 中调整解决方案:检查列表中的项目是否在 df index 中):

df['TemporaryFix'] = np.where((df[(df.index.isin(lindex)) & (df['colname'] == cname)]),'yes','')

它没有用。我在代码中犯了错误还是因为它是一个多索引 df?有什么建议么?谢谢

标签: pythonpandasmulti-index

解决方案


cname = 'Market Sector'
lindex = [('b', pd.NA, 20), ('d', pd.NA, 5)]

尝试:

通过布尔掩码和.loc访问器

m=(df['colname'].eq(cname)) & (df.index.isin(lindex))
df.loc[m,'TemporaryFix']='yes'

或者

通过np.where()

m=(df['colname'].eq(cname)) & (df.index.isin(lindex))
df['TemporaryFix']=np.where(m,'yes','')

推荐阅读