Python pandas实现条件类别

时间:2017-05-18 20:35:45

标签: python conditional-statements categories

在以下数据框中df:

Type  Description Counts
A        blue      34645
A        red       45765
B        red       36587
C        green     42653

我想实现类别层次结构,但仅适用于类型A.

我正在使用此代码:

category_hierarchy={
'blue':'in progress',
'red':'review'}

df['Category_Hierachy'] = df['Description'].replace(category_hierarchy)

但是,这会产生以下结果:

Type  Description Counts  Category_Hierachy
A        blue      34645    in progress
A        red       45765    review
B        red       36587    review
C       green      42653    green

INSTEAD OF

Type  Description Counts  Category_Hierachy
A        blue      34645    in progress
A        red       45765    review
B        red       36587    
C       green      42653    

如何将代码仅应用于类型为A的行?

谢谢

2 个答案:

答案 0 :(得分:1)

假设emaildf的拼写错误,并且我正确理解您要尝试的内容:您添加的列中的空格必须填充某些价值。您无法创建甚至没有某些行条目的列。只要这没关系,我建议创建新列,首先将所有值设置为“默认”,然后再分配给Type'A'的行。

就代码而言,您可以创建一个填充空字符串的新列

df['Category_Hierarchy'] = ''

(替换您选择的默认值),然后您可以使用布尔索引仅引用类型A的行。

index = df['Type'] == 'A'
df.loc[index, 'Category_Hierarchy'] = ...

最后一行只会分配到Category_Hierarchy列为Type的行'A'中的单元格。

答案 1 :(得分:1)

使用apply

def custom_apply(row):

    if row['Type'] == 'A':

        return category_hierarchy[row['Description']]

    return ''

df['Category_Hierachy'] = df.apply(custom_apply, 1)

使用isin

idx = df['Type'].isin(['B', 'C'])
df.ix[idx, "Category_Hierachy"] = ""