根据第一列的级别和第二列的条件填充列



我们有一个数据框架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

最新更新