通过条件将行列表与一列相乘DATA FRAME

问题描述

我想用一个col乘以列的列表,所以我有column = cols的列,但是我只想乘以 name ==“ A”。列为“ multi”

data={"col1":[2,3,4,5],"col2":[4,2,6],"col3":[7,6,9,11],"col4":[14,11,22,8],"name":["A","A","V","A"],"multi":[1.4,2.5,1.6,2.2]}
df=pd.DataFrame.from_dict(data)
cols=list(df.columns)
for x in ["multi","name","col4"]:
    cols.remove(x)
df

类似这样的东西

df[cols]=df.loc[df["name"]=="A"]*df["multi"]

解决方法

让我们做

m = ~df.columns.isin(["multi","name","col4"])
df.loc[df.name=='A',m] = (df.loc[df.name=='A',m].mul(df.multi,axis=0))
df
Out[94]: 
   col1  col2  col3  col4 name  multi
0   2.8   5.6   9.8    14    A    1.4
1   7.5   5.0  15.0    11    A    2.5
2   4.0   4.0   9.0    22    V    1.6
3  11.0  13.2  24.2     8    A    2.2
,

尝试

df.loc[df.name=='A',cols] = df[df.name=='A'].apply(lambda r:r[cols]*r['multi'],axis=1)