如果列中的每个值有多个唯一行,则python将标记

如果列中的每个值有多个唯一行,则python将标记,python,pandas,dataframe,flags,Python,Pandas,Dataframe,Flags,在以下数据框中,我有三列: Code | Category | Count X A 89734 X A 239487 Y B 298787 Z B 87980 W C 098454 我需要添

在以下数据框中,我有三列:

   Code      |   Category  |    Count
     X               A          89734
     X               A          239487
     Y               B          298787
     Z               B          87980
     W               C          098454
我需要添加一个列,如果一个类别有多个唯一的代码(如上面示例中的B),它将获得一个标志,表示它是一个测试

所以我想要的结果是:

   Code      |   Category  |    Count    | Test_Flag
     X               A          89734       
     X               A          239487
     Y               B          298787         T
     Z               B          87980          T
     W               C          098454
您可以使用来查找
索引值,然后使用以下内容创建新列:

loc
中使用的布尔掩码的另一种解决方案:

print (df.groupby('Category').Code.transform('nunique'))
0    1
1    1
2    2
3    2
4    1
Name: Code, dtype: int64

mask = df.groupby('Category').Code.transform('nunique') > 1
print (mask)
0    False
1    False
2     True
3     True
4    False
Name: Code, dtype: bool

df.loc[mask, 'Test_Flag'] = 'T'
#if necessary, replace NaN to empty string
#df.Test_Flag = df.Test_Flag.fillna('')

print (df)
  Code Category   Count Test_Flag
0    X        A   89734       NaN
1    X        A  239487       NaN
2    Y        B  298787         T
3    Z        B   87980         T
4    W        C   98454       NaN
您还可以选择使用填充值

df['Test_flag'] = np.where(df.groupby('Category').Code.transform('nunique') > 1, 'T', '')


>>> df
  Category Code   Count Test_flag
0        A    X   89734          
1        A    X  239487          
2        B    Y  298787         T
3        B    Z   87980         T
4        C    W   98454          
df['Test_flag'] = np.where(df.groupby('Category').Code.transform('nunique') > 1, 'T', '')


>>> df
  Category Code   Count Test_flag
0        A    X   89734          
1        A    X  239487          
2        B    Y  298787         T
3        B    Z   87980         T
4        C    W   98454