python - 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?有什么建议么?谢谢
解决方案
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','')
推荐阅读
- javascript - 如何“反转格式”
- linux - 如何使用 bash 脚本从 base64 转换的文件中播放声音?
- java - 将组件添加到 JTabbedPane
- python - Python 无法导入 pmdarima ARIMA 函数
- node.js - VueJS - 用于构建的 vue.config.js 代理配置
- mysql - 将 SQL Server DATETIMEOFFSET 转换为 mySQL DateTime
- python - 如何修复“ValueError:零大小数组到没有标识的归约操作 fmin”
- ruby - Rubygems 指向 macOS 上的未知目录
- javascript - 如何检查值是否与导入的类名相同
- android - 将 android Facebook SDK 添加到项目后的 java.lang.NoClassDefFoundError 和 ClassNotFoundException