我们有一个数据框架df,包含如下所示的两列。变量A有两个级别,1和2。变量B有三个级别YES, NO和OTHER。我们想派生另一个数据帧df2,它带有变量C,它的值为"1">如果在变量A中任何级别存在至少一个YES,否则"0"
df
A B
1 YES
1 YES
1 OTHER
1 NO
1 YES
1 NO
2 YES
2 YES
2 YES
2 NO
2 YES
3 OTHER
3 NO
3 NO
3 NO
df2
A C
1 1
2 1
3 0
使用groupby
:
>>> df['B'].eq('YES').groupby(df['A']).any().astype(int).reset_index(name='C')
A C
0 1 1
1 2 1
2 3 0
一种选择是将列B
转换为数字,使用默认字典,然后在A
上分组以获得最大值:
from collections import defaultdict
d = defaultdict(int)
d['YES'] = 1
df.assign(B = df.B.map(d)).groupby('A', as_index = False).agg(C=('B', 'max'))
A C
0 1 1
1 2 1
2 3 0