按条件将行列表与一列相乘(DATA FRAME)
multiply list of row with one column by condition (DATA FRAME)
我想将一个列的列表乘以一个列,所以我有列的列表 = cols,但我只想乘以那些行
name=="A" .with 列 "multi"
data={"col1":[2,3,4,5],
"col2":[4,2,4,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)
我想将一个列的列表乘以一个列,所以我有列的列表 = cols,但我只想乘以那些行 name=="A" .with 列 "multi"
data={"col1":[2,3,4,5],
"col2":[4,2,4,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)