【问题标题】:pivot table with if else condition pandas带有 if else 条件 pandas 的数据透视表
【发布时间】:2021-08-19 17:59:33
【问题描述】:

我有一张桌子:

project location category lifecycle ftecount>3 bpssscore
abc Bangalore s Incre 41 3.98
Sys Bangalore s SDS 35.3 3.98
Syst Chennai Task 13 2 3.98
EPS Bangalore s Task 5 3.98
foss Bangalore s sds 6 3.98
opc Noida task 13 1 3.98

希望输出为:

project loc_Bangalore loc_Chennai loc_Noida cat_s cat_task ftecount>3 bpssscore>3
abc 1 0 0 1 0 1 1
Sys 1 0 0 1 0 1 1
Syst 0 1 0 0 1 0 1
EPS 1 0 0 1 0 1 1
foss 1 0 0 1 0 1 1
opc 0 0 1 0 1 0 1

这里的条件是:

1.想要根据列位置、类别的唯一值动态添加新列。

2.在新列中的值将根据以下条件: --if location = 'Banglore' 然后将 1 else 0 放入新列 loc_banglore。

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

3.对于 ftecount 和 bpss 列,我们只需要检查条件: -- if ftecount>3 then 1 else 0

bpss 列的逻辑相同。'

请帮我解决这个问题。

【问题讨论】:

    标签: python pandas numpy machine-learning data-science


    【解决方案1】:

    先将category列中的大写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,你会得到:

    【讨论】:

      【解决方案2】:

      您可以使用pd.get_dummies() 实现one-hot 编码结果,并使用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)
      

      输出df

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 2014-09-02
        • 2022-11-23
        相关资源
        最近更新 更多