Pandas:基于不同列的某一行的值进行复制

5
我想实现的目标是,当col2中的一行为1时,只要col1中的行具有相同的名称,就将该1复制到col2中的所有其他值。例如,如果数据框如下所示:
col1  col2
xx      1
xx      0
xx      0
xx      0
yy      0
yy      0
yy      0
zz      0
zz      0
zz      1

输出结果将会是:
col1  col2
xx      1
xx      1
xx      1
xx      1
yy      0
yy      0
yy      0
zz      1
zz      1
zz      1
2个回答

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

输出:

  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

0
通用的技巧是执行一个 .groupby,检查是否有任何值等于 1。然后将输出映射回该布尔返回值。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接