如何乘以一列中的列列表
How to multiply a list of columns in a column
我想将一个列的列表乘以一个列
所以我有列的列表= cols
我想将它们与列“multi”
相乘
data={"col1":[2,3,4,5],
"col2":[4,2,4,6],
"col3":[7,6,9,11],
"col4":[14,11,22,8],
"multi":[1.4,2.5,1.6,2.2]}
df=pd.DataFrame.from_dict(data)
cols=list(df.columns)
cols.remove("multi")
df
所以我尝试这样做:
df[cols]=df[cols]*df["multi"]
但是我明白了
ValueError: Columns must be same length as key
试试这个:
df.iloc[:, your_cols] *= df['multi']
其中:
your_cols = [df.columns.get_loc(c) for c in cols]
In [46]: data={"col1":[2,3,4,5],
...: "col2":[4,2,4,6],
...: "col3":[7,6,9,11],
...: "col4":[14,11,22,8],
...: "multi":[1.4,2.5,1.6,2.2]}
...: df=pd.DataFrame.from_dict(data)
...: cols=list(df.columns)
...: cols.remove("multi")
...: df
Out[46]:
col1 col2 col3 col4 multi
0 2 4 7 14 1.4
1 3 2 6 11 2.5
2 4 4 9 22 1.6
3 5 6 11 8 2.2
In [47]: df[['col1','col2','col3','col4']].multiply(df["multi"], axis="index")
Out[47]:
col1 col2 col3 col4
0 2.8 5.6 9.8 19.6
1 7.5 5.0 15.0 27.5
2 6.4 6.4 14.4 35.2
3 11.0 13.2 24.2 17.6
df[cols] = (df[cols].T*df["multi"]).T
你也可以试试这个
df.apply(lambda x :x[cols]*x["multi"], axis=1)
我想将一个列的列表乘以一个列 所以我有列的列表= cols 我想将它们与列“multi”
相乘data={"col1":[2,3,4,5],
"col2":[4,2,4,6],
"col3":[7,6,9,11],
"col4":[14,11,22,8],
"multi":[1.4,2.5,1.6,2.2]}
df=pd.DataFrame.from_dict(data)
cols=list(df.columns)
cols.remove("multi")
df
所以我尝试这样做:
df[cols]=df[cols]*df["multi"]
但是我明白了
ValueError: Columns must be same length as key
试试这个:
df.iloc[:, your_cols] *= df['multi']
其中:
your_cols = [df.columns.get_loc(c) for c in cols]
In [46]: data={"col1":[2,3,4,5],
...: "col2":[4,2,4,6],
...: "col3":[7,6,9,11],
...: "col4":[14,11,22,8],
...: "multi":[1.4,2.5,1.6,2.2]}
...: df=pd.DataFrame.from_dict(data)
...: cols=list(df.columns)
...: cols.remove("multi")
...: df
Out[46]:
col1 col2 col3 col4 multi
0 2 4 7 14 1.4
1 3 2 6 11 2.5
2 4 4 9 22 1.6
3 5 6 11 8 2.2
In [47]: df[['col1','col2','col3','col4']].multiply(df["multi"], axis="index")
Out[47]:
col1 col2 col3 col4
0 2.8 5.6 9.8 19.6
1 7.5 5.0 15.0 27.5
2 6.4 6.4 14.4 35.2
3 11.0 13.2 24.2 17.6
df[cols] = (df[cols].T*df["multi"]).T
你也可以试试这个
df.apply(lambda x :x[cols]*x["multi"], axis=1)