Home > Blockchain >  Pandas: copying values of a certain row based on a different column
Pandas: copying values of a certain row based on a different column

Time:11-15

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:

Use groupby.transform('max'):

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
  • Related