根据第一列的水平和第二列的条件填充一列

Fill a column based on levels of first column and condition on second column

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

一个选项是使用 defaultdict 将列 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