满足条件时使列行与另一列的匹配值相同

Make column rows the same value with matching value of another column when condition is met

我有一个如下所示的数据框

df = pd.DataFrame({'col1': ['A', 'A', 'B', 'C', 'D', 'D'],
                   'col2': [1,0,1,0,0,1]})
col1 col2
A 1
A 0
B 1
C 0
D 0
D 1

如果 col2 = 1 中有一行,我想使所有 col2 行 = 1 以获得相同的值 col1 值。我想要的table如下:

col1 col2
A 1
A 1
B 1
C 0
D 1
D 1

非常感谢任何帮助!

如果列中只有0和1,可以使用groupby transform:

df['col2'] = df.col2.groupby(df.col1).transform('max')

df
  col1  col2
0    A     1
1    A     1
2    B     1
3    C     0
4    D     1
5    D     1

通常,如果任何值为 1,您可以将 lambda 传递给 return 1:

df['col2'] = df.col2.groupby(df.col1).transform(lambda g: 1 if (g == 1).any() else g)

df    
  col1  col2
0    A     1
1    A     1
2    B     1
3    C     0
4    D     1
5    D     1

您可以分两步将其分块:

获取col2为1的行:

filters = df.loc[df.col2.eq(1), 'col1']

将新值分配给行,其中 col1 在 filters:

df.loc[df.col1.isin(filters), 'col2'] = 1

df
 
  col1  col2
0    A     1
1    A     1
2    B     1
3    C     0
4    D     1
5    D     1