Python 具有if-else条件的透视表

Python 具有if-else条件的透视表,python,pandas,numpy,machine-learning,data-science,Python,Pandas,Numpy,Machine Learning,Data Science,我有一张桌子: 项目 位置 类别 生命周期 ftecount>3 BPSScore abc 班加罗尔 s 递增 41 3.98 系统 班加罗尔 s 十二烷基硫酸钠 35.3 3.98 系统 钦奈 任务 13 2. 3.98 EPS 班加罗尔 s 任务 5. 3.98 自由和开放源码软件 班加罗尔 s 十二烷基硫酸钠 6. 3.98 opc 诺伊达 任务 13 1. 3.98 首先将类别列中的大写T替换为小写: df['category']=df['category'].str.replace('

我有一张桌子:

项目 位置 类别 生命周期 ftecount>3 BPSScore abc 班加罗尔 s 递增 41 3.98 系统 班加罗尔 s 十二烷基硫酸钠 35.3 3.98 系统 钦奈 任务 13 2. 3.98 EPS 班加罗尔 s 任务 5. 3.98 自由和开放源码软件 班加罗尔 s 十二烷基硫酸钠 6. 3.98 opc 诺伊达 任务 13 1. 3.98
首先将类别列中的大写T替换为小写:

df['category']=df['category'].str.replace('T','t')
现在使用
pd.get_dummies()
drop()
reset_index()
方法:

out=pd.get_dummies(df.set_index('project').drop(['ftecount>3','bpssscore','lifecycle'],1)).reset_index()
out['ftecount>3']=df['ftecount>3'].gt(3).astype(int)
out['bpssscore']=df['bpssscore'].gt(3).astype(int)
最后使用
gt()
astype()
方法:

out=pd.get_dummies(df.set_index('project').drop(['ftecount>3','bpssscore','lifecycle'],1)).reset_index()
out['ftecount>3']=df['ftecount>3'].gt(3).astype(int)
out['bpssscore']=df['bpssscore'].gt(3).astype(int)
现在,如果您将
打印出来
,您将得到:


您可以使用
pd.get_dummies()
来实现一个热编码结果,并使用
lambda()
函数来过滤分数是否大于3

df = pd.DataFrame({
    'project': ['abc', 'Sys', 'Syst' ,'EPS', 'foss', 'opc'], 
    'location': ['Bangalore' ,'Bangalore', 'Chennai', 'Bangalore', 'Bangalore', 'Noida'],
    'category': ['s', 's', 'task', 's', 's', 'task'], 
    'ftecount': [41, 35.3, 2, 5, 6, 1],
    'bpssscore': [3.98, 3.98, 3.98, 3.98, 3.98, 3.98]
})
df['ftecount>3'] = df['ftecount'].apply(lambda x: 1 if x>3 else 0)
df['bpssscore>3'] = df['bpssscore'].apply(lambda x: 1 if x>3 else 0)

df = pd.concat([df['project'], 
                pd.get_dummies(df['location'], prefix='loc'), 
                pd.get_dummies(df['category'], prefix='cat'), 
                df['ftecount>3'], 
                df['bpssscore>3']
               ], axis=1)
输出测向