具有if-else条件的透视表

2024-09-20 22:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子:

^{tb1}$

希望输出为:

^{tb2}$

这里的条件是:

1.希望从列位置、类别的唯一值动态添加新列

2.在新列中,值应符合以下条件: --如果位置='Banglore',则在新列loc_Banglore中放入1或0

类似条件适用于所有位置唯一值和类别(在df中添加新列)

3.对于ftecount和bpss列,我们只需检查以下条件: --如果ftecount>;3,然后1,否则0

bpss列的逻辑相同。”

请帮我解决这个问题


Tags: gtdf动态逻辑条件类别loc桌子
2条回答

首先将类别列中的大写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()

最后使用gt()astype()方法:

out['ftecount>3']=df['ftecount>3'].gt(3).astype(int)
out['bpssscore']=df['bpssscore'].gt(3).astype(int)

现在,如果您打印out,您将获得:

enter image description here

您可以使用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)

输出测向

enter image description here

相关问题 更多 >

    热门问题