python仅对一个类别应用if语句和groupby
这个问题的背驮 我只想将以下规则应用于类型为X的行python仅对一个类别应用if语句和groupby,python,pandas,if-statement,group-by,Python,Pandas,If Statement,Group By,这个问题的背驮 我只想将以下规则应用于类型为X的行 df['Test_flag'] = np.where(df.groupby('Category').Code.transform('nunique') > 1, 'T', '') 数据帧df: Code | Type | Category | Count code1 Y A 89734 code1 Y A
df['Test_flag'] = np.where(df.groupby('Category').Code.transform('nunique') > 1, 'T', '')
数据帧df:
Code | Type | Category | Count
code1 Y A 89734
code1 Y A 239487
code2 Z B 298787
code3 Z B 87980
code4 Y C 098454
code5 X D 298787
code6 X D 87980
预期结果:
Code | Type | Category | Count | Test Flag
code1 Y A 89734
code1 Y A 239487
code2 Z B 298787
code3 Z B 87980
code4 Y C 098454
code5 X D 298787 T
code6 X D 87980 T
说明:
df['Test_flag'] = np.where((df['Type'] == 'X') &df.groupby('Category').Code.transform('nunique') > 1, 'T', '')
我得到以下错误:
ValueError: operands could not be broadcast together with shapes (1,2199) (7620,)
逻辑和中缺少括号,这将导致错误分析条件中的操作顺序。除此之外,你的逻辑看起来应该有效
df['Test_flag'] = (np.where((df.Type == 'X') &
(df.groupby('Category').Code.transform('nunique') > 1),
'T', ''))
最小演示
>>> df
Category Code Count Type
0 A code1 1 Y
1 A code1 2 Y
2 B code2 3 Z
3 B code3 4 Z
4 C code4 5 Y
5 D code5 4 X
6 D code6 2 X
>>> df['Test_flag'] = (np.where((df.Type == 'X') &
(df.groupby('Category').Code.transform('nunique') > 1),
'T', ''))
>>> df
Category Code Count Type Test_flag
0 A code1 1 Y
1 A code1 2 Y
2 B code2 3 Z
3 B code3 4 Z
4 C code4 5 Y
5 D code5 4 X T
6 D code6 2 X T
我可能读错了,但我认为这更直观(至少对我来说),不需要numpy:
df['Test Flag'] = ''
df['Test Flag'][(~df['Code'].duplicated()) & (df['Type'] == 'X')] = 'T'
结果:
Code Type Category Count Test Flag
0 code1 Y A 89734
1 code1 Y A 239487
2 code2 Z B 298787
3 code3 Z B 87980
4 code4 Y C 098454
5 code5 X D 298787 T
6 code6 X D 87980 T
df.loc[df['Type']='X','Test_flag']=.
?正确-一个类别为“D”,但两个不同的代码;A类代码相同,B类代码不同,但不是X类