【问题标题】:How to multiply a list of columns in a column如何将列中的列列表相乘
【发布时间】:2020-11-29 02:37:36
【问题描述】:

我想将一个列与一个列相乘 所以我有列的列表= 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:列必须与键长度相同

【问题讨论】:

  • 您可以使用df.filter(like="col").multiply(df["multi"], 0) 而不是将列名称分配为变量。

标签: python pandas list multiple-columns


【解决方案1】:
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=df[cols].multiply(df["multi"], axis="index") df 现在它的工作
  • @matan 是的,您需要分配给一个变量
【解决方案2】:
df[cols] = (df[cols].T*df["multi"]).T

【讨论】:

    【解决方案3】:

    试试这个:

    df.iloc[:, your_cols] *= df['multi']
    

    地点:

    your_cols = [df.columns.get_loc(c) for c in cols]
    

    【讨论】:

    • 我明白了:IndexError: .iloc 需要数字索引器,得到 ['col1' 'col2' 'col3' 'col4']
    【解决方案4】:

    你也可以试试这个

    df.apply(lambda x :x[cols]*x["multi"], axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多