python - 如果列名包含 1,则对列进行变异
问题描述
我想改变一个列 h,如果它包含 1,则它包含相应的列名 [A,B,C,D]
import pandas as pd
dfz = pd.DataFrame({'A' : [1,0,0,1,0,0],
'B' : [1,0,0,1,0,1],
'C' : [1,0,0,1,3,1],
'D' : [1,0,0,1,0,0]})
dfz['h'] = dfz.loc[:, 'A':'D'].replace(1,pd.Series(dfz.columns,dfz.columns))
预期产出
解决方案
DataFrame.dot
与过滤列和比较值一起使用1
,最后Series.replace
与空格一起使用:
#filtered columns
dfz['h'] = dfz.loc[:, 'A':'D'].eq(1).dot(dfz.loc[:, 'A':'D'].columns).replace('', '0')
#filtered by list
cols = ['A','B','C','D']
dfz['h'] = dfz[cols].eq(1).dot(pd.Index(cols)).replace('', '0')
print (dfz)
A B C D h
0 1 1 1 1 ABCD
1 0 0 0 0 0
2 0 0 0 0 0
3 1 1 1 1 ABCD
4 0 0 3 0 0
5 0 1 1 0 BC
推荐阅读
- azure-ad-b2c - 使用过时版本的 JQuery(版本 1.10.2)的 Azure B2C
- excel - Excel公式计算列中所有非空白单元格中的行数(不一定是行)
- recursion - (方案)尾递归模幂
- sql-update - Quartz 更新数据库中的下一个触发时间
- python - python aiohttp服务器和客户端与asyncio
- python - 无法 pip 安装 aiohttp python
- c# - 如何在 C# 中生成单个对象?
- python-3.x - 如何加快我在 python 中的集成程序?
- node.js - 尝试在路由内使用带有 socket.io 的发射事件
- java - 如何使倒计时进度条不断下降?