代码之家  ›  专栏  ›  技术社区  ›  Mike

基于列值的条件乘法

  •  4
  • Mike  · 技术社区  · 7 年前

    我有一个数据帧,如下所示:

    index  client year  value
      1      A    2011    5
      2      A    2012    10
      ...
      8      A    2018    7
      9      B    2011    14
      10     B    2012    54
      ...
      ...    Z    2011    5
    

    我需要用与年份相关的值乘以这些值。我有一个系列如下:

    2011  2
    2012  2.5
    2013  3
    2014  3.5
    ...
    2018  5.5
    

    我需要所有年份的值乘以这些年份相关的值。它看起来像

    index  client year  value
      1      A    2011    10
      2      A    2012    25
     ...etc
    

    我写了一个循环来完成这个任务,但是它远远不够优雅和高效。如何高效优雅地完成这项工作?

    2 回复  |  直到 7 年前
        1
  •  5
  •   BENY    7 年前

    使用 reindex

    df.value*=s.reindex(df.year).values
    df
    Out[44]: 
       index client  year  value
    0      1      A  2011   10.0
    1      2      A  2012   25.0
    
        2
  •  3
  •   sacuL    7 年前

    如果您的系列看起来像:

    >>> s
    0
    2011    2.0
    2012    2.5
    2013    3.0
    2014    3.5
    2018    5.5
    Name: 1, dtype: float64
    

    map :

    df['value'] = df['value'].mul(df.year.map(s))
    

    >>> df
       index client  year  value
    0      1      A  2011   10.0
    1      2      A  2012   25.0
    2      8      A  2018   38.5
    3      9      B  2011   28.0
    4     10      B  2012  135.0
    ....