2 回答
TA贡献1834条经验 获得超8个赞
这是使用的一种方法np.select
:
conds = [df.Color.eq('red'), df.Color.eq('purple')]
df['col3'] = np.select(conds, [1,0], '')
df['col3'] = df.groupby('ID').col3.transform('max')
或者我们可以改为将 a 设置nan为默认值,并使用 进行转换first:
df['col3'] = np.select(conds, [1,0], np.nan)
df['col3'] = df.groupby('ID').col3.transform('first').fillna('')
print(df)
ID Color col3
0 1 red 1
1 1 blue 1
2 1 yellow 1
3 2 blue 0
4 2 purple 0
5 3 yellow
6 3 green
请注意,前一种方法利用了以下优势:
max('', '0')
# '0'
max('', '1')
# '1'
TA贡献1852条经验 获得超7个赞
numpy如果您出于任何原因不想使用,这里有一个替代方案:
df['col3'] = df.set_index('ID')['Color'].apply({'red': 1, 'purple': 0}.get).groupby(level=0).transform('max').fillna('').reset_index(drop=True)
ID Color col3
0 1 red 1
1 1 blue 1
2 1 yellow 1
3 2 blue 0
4 2 purple 0
5 3 yellow
6 3 green
添加回答
举报