python - 如何删除由“̶i̶s̶i̶n̶(̶)̶”df.mask()找到的单元格和剪切行?
问题描述
我有带有随机单元格的数据框,例如“老板”。如何使用 df.isin() 删除同一行中的单元格“boss”和所有正确的单元格?
x=[]
for i in range (5):
x.append("boss")
df=pd.DataFrame(np.diagflat(x) )
0 1 2 3 4
0 boss
1 boss
2 boss
3 boss
4 boss
使用“i̶s̶i̶n̶(̶)̶” df.mask 将行剪切到
mask=(df.eq('boss').cumsum(axis=1).ne(0))
df.mask(mask,"Nan", inplace =True)
df
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN
4 NaN
解决方案
DataFrame.mask
与面膜一起使用:
df = df.mask(df.eq('boss').cumsum(axis=1).ne(0))
print (df)
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN
4 NaN
细节:
比较值boss
:
print (df.eq('boss'))
0 1 2 3 4
0 True False False False False
1 False True False False False
2 False False True False False
3 False False False True False
4 False False False False True
使用每行的累积总和,所以在第一次匹配1
之后,在第二次之后2
..:
print (df.eq('boss').cumsum(axis=1))
0 1 2 3 4
0 1 1 1 1 1
1 0 1 1 1 1
2 0 0 1 1 1
3 0 0 0 1 1
4 0 0 0 0 1
如果不相等则比较0
并传递给mask
:
print (df.eq('boss').cumsum(axis=1).ne(0))
0 1 2 3 4
0 True True True True True
1 False True True True True
2 False False True True True
3 False False False True True
4 False False False False True
推荐阅读
- php - 选择框并输入
- acumatica - 移动销售订单添加库存项目
- javascript - JS Jest:在简单的模拟测试中出现未定义的错误
- haskell - 没有因使用“lookupBlob”而产生 (Git.Libgit2.HasLgRepo IO) 的实例
- asynchronous - 在 NodeJS 中实现并保存了多个 Promise
- html - 无法在设计登录页面中显示引导样式表
- ios - 从 prefersStatusBarHidden 检测屏幕缺口
- erlang - Ecto 的片段允许 SQL 注入
- python - sudo pipenv 运行问题
- javascript - 在 NodeJs 中创建文件夹