满足条件时使列行与另一列的匹配值相同
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
我有一个如下所示的数据框
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