What I'm trying to achieve is that when a row in col2 has a 1, it will copy that 1 onto all the other values in col2 as long as the rows in col1 have the same name. As an example, if the dataframe looks like this
col1 col2
xx 1
xx 0
xx 0
xx 0
yy 0
yy 0
yy 0
zz 0
zz 0
zz 1
The output would be
col1 col2
xx 1
xx 1
xx 1
xx 1
yy 0
yy 0
yy 0
zz 1
zz 1
zz 1
I'm really new to python and don't have a single clue how to even approach this issue. Any help would be greatly appreciated.
CodePudding user response:
df['col2'] = df.groupby('col1')['col2'].transform('max')
Output:
col1 col2
0 xx 1
1 xx 1
2 xx 1
3 xx 1
4 yy 0
5 yy 0
6 yy 0
7 zz 1
8 zz 1
9 zz 1
CodePudding user response:
The generic trick here is to perform a .groupby
that checks is any
value is equal to 1. Then map your output back over that boolean return.
df['col2'] = (
df['col2'].eq(1)
.groupby(df['col1']).transform('any')
.map({True: 1, False: 0}) # could also use `.astype(int)`
)
print(df)
col1 col2
0 xx 1
1 xx 1
2 xx 1
3 xx 1
4 yy 0
5 yy 0
6 yy 0
7 zz 1
8 zz 1
9 zz 1