首页 > 解决方案 > 在某些行中,从一列获取值并将其传播到另一列

问题描述

有以下数据框:

df = pd.DataFrame(np.random.randint(0,1000,size=(9,4)), columns=list('ABCD'))
df.loc[5:7,'A']=123

df

在“A”列中有 123 个的每一行中,我希望“C”和“D”列值等于“B”。

理想的输出:

可取的

我试过:

df.loc[df['A']==123].assign(**(df.C=df.B,df.D=df.B ))

哪个返回 SyntaxError: invalid syntax

标签: pythonpandas

解决方案


您可以将 column 设置B为中的列列表DataFrame.loc

np.random.seed(2020)
df = pd.DataFrame(np.random.randint(0,1000,size=(9,4)), columns=list('ABCD'))
df.loc[5:7,'A']=123

df.loc[df['A']==123, ['C','D']] = df.B
print (df)
     A    B    C    D
0  864  392  323  630
1  707   91  637  643
2  583  952  157  560
3  160  920  970  777
4  691  139   55  626
5  123  195  195  195
6  123  156  156  156
7  123  980  980  980
8   79  325  458  841

您的解决方案应该使用不同的语法进行更改 - 删除**并删除重新分配列df.

df.loc[df['A']==123] = df.assign(C=df.B,D=df.B)

推荐阅读