python - 根据更改的列条件设置多个列值
问题描述
我想采用不同重要性级别的数据框,从第一到第三,例如:
FIRST SECOND THIRD
0 Yes Yes Yes
1 Yes No No
2 No Yes Yes
3 No No Yes
并说如果 FIRST 是最高级别,并且 FIRST = Yes,则将其余列设置为 No。此逻辑应沿链向下延伸,即如果 FIRST = No,但 SECOND = YES,则 THIRD 应 = NO。
本质上,它应该只在价值最高的列中保留“是”。在我的真实数据框中,No 只是一个空字符串“”。
示例输出:
FIRST SECOND THIRD
0 Yes No No
1 Yes No No #Stays the same
2 No Yes No
3 No No Yes #Stays the same
我已经用嵌套的 for 循环实现了它,但这显然不适用于任何 Pandas。我敢肯定有一个更优雅的矢量化解决方案,任何人都可以帮助我,谢谢!
解决方案
Comapre by Yes
and for 首先Yes
使用 double DataFrame.cumsum
,然后比较 by1
并创建 new DataFrame
with numpy.where
:
mask = df.eq('Yes').cumsum(axis=1).cumsum(axis=1).eq(1)
df = pd.DataFrame(np.where(mask, 'Yes','No'), index=df.index, columns=df.columns)
print (df)
FIRST SECOND THIRD
0 Yes No No
1 Yes No No
2 No Yes No
3 No No Yes
推荐阅读
- postgresql - jsonb在数组中搜索键并返回位置
- excel - Exce VBA:用两个连续的大写单词突出显示单元格
- angular - 第二次调度未触发 ngrx 8 效果
- arrays - 快速解码单个对象与对象数组的 JSON
- r - 按名称划分列
- python - 返回列表的二叉搜索树的中序遍历
- c++ - 如何仅使用 C++ 将 .tex 转换为 .pdf
- bash - 如何将“ansible-vault encrypt_string”的输出存储到bash中的变量中
- excel - 根据多个条件查找重复项并标记它们
- microsoft-teams - 有没有办法判断您的应用程序是否在 Microsoft Teams 中运行