Pandas中基于列值的条件乘法

Pandas中基于列值的条件乘法,pandas,pandas-groupby,Pandas,Pandas Groupby,我有一个数据框,如下所示: 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    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    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

现在我写了一个循环来实现这一点,但它远远不够优雅和高效。如何高效、优雅地执行此操作?

使用
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

如果您的系列看起来像:

>>> 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
....

这也是一个很好的解决方案。谢谢