【问题标题】:Multiply random columns by another column将随机列乘以另一列
【发布时间】:2017-10-03 17:54:45
【问题描述】:

我有一个由df 的随机标题名称填充的列表。

listado=['A','J']

listado 只能有 1 个值。

如果 listado 有值,那么我希望它将 df 中的这些列乘以另一个数据帧,该数据帧由名为 valores 的 1 列组成。

valores=df2.values

df2=
   value
0    2 
1    4  
2    3

df如下:

df=
    A  B  C  J  K
0   3  2  5  4  7  
1   5  5  5  5  5
2   9  8  5  1  7

然后所需的输出是将列AJ 乘以valuesdf2

    A  B  C  J   K
0   6  2  5  8   7  
1  20  5  5  20  5
2  27  8  5  3   7

我正在尝试这样的事情,以便将列表中获得的特定列相乘:

if listado:
    valores=df2.values
    for units in listado:
        df1[units]=df1[units]*valores
 return df1

但它

 raise Exception('Data must be 1-dimensional')

和我尝试的时候一样:

if listado:
    valores=df2.values
    for i in range(len(listado)):
        df1[listado[i]]=df1[listado[i]]*valores
 return df1

我怎样才能得到想要的输出?

【问题讨论】:

    标签: python pandas dataframe multiplication


    【解决方案1】:

    axis=0 上使用条件.locmul

    In [496]: df.loc[:, listado] = df.loc[:, listado].mul(df2['value'], axis=0)
    
    In [497]: df
    Out[497]:
        A  B  C   J  K
    0   6  2  5   8  7
    1  20  5  5  20  5
    2  27  8  5   3  7
    

    【讨论】:

      【解决方案2】:

      使用数组数据-

      df[listado] = df[listado].values * df2.values
      

      示例运行 -

      In [973]: df
      Out[973]: 
         A  B  C  J  K
      0  3  2  5  4  7
      1  5  5  5  5  5
      2  9  8  5  1  7
      
      In [974]: df[listado] = df[listado].values * df2.values
      
      In [975]: df
      Out[975]: 
          A  B  C   J  K
      0   6  2  5   8  7
      1  20  5  5  20  5
      2  27  8  5   3  7
      

      【讨论】:

      • 啊,这已经足够接近我的了……删除
      • @cᴏʟᴅsᴘᴇᴇᴅ 几秒 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多