我目前有一个如下所示的数据框:
Owner Vehicle_Color
0 James Red
1 Peter Green
2 James Blue
3 Sally Blue
4 Steven Red
5 James Blue
6 James Red
7 Peter Blue
请注意,James
附加了两个vehicle_colors
,Red
和Blue
我想要做的是,如果所有者在列的任何位置都有Red
值的Vehicle_Color
颜色,请将所有其他值替换为Red
。
有什么想法吗?
谢谢
答案 0 :(得分:2)
让我们使用access forbidden by rule, client: 100.97.0.0, server: my-host.com, request: "GET /v1/doesnotwork HTTP/1.1", host: "my-host.com"
+ transform
摆脱lambda:
any
或者,
m = df.Vehicle_Color.eq('Red').groupby(df.Owner).transform('any')
df.loc[m, 'Vehicle_Color'] = 'Red'
这应该稍快一些,因为在m = (
df.set_index('Owner')
.Vehicle_Color
.eq('Red')
.groupby(level=0)
.transform('any')
)
df.loc[m, 'Vehicle_Color'] = 'Red'
的索引上指定了石斑鱼。
df
答案 1 :(得分:1)
你可以
In [279]: df['Vehicle_Color'] = df.groupby('Owner')['Vehicle_Color'].transform(
lambda x: 'Red' if 'Red' in list(x) else x)
In [280]: df
Out[280]:
Owner Vehicle_Color
0 James Red
1 Peter Green
2 James Red
3 Sally Blue
4 Steven Red
5 James Red
6 James Red
7 Peter Blue