【问题标题】:Multiply list of columns in pandas DataFrame乘以熊猫数据框中的列列表
【发布时间】:2016-01-02 15:23:08
【问题描述】:

我有一个 DataFrame (df),包含以下列:

cols = ['A','B','C','D']

如何将这些列中的值相乘以形成一个名为“VAL”的列?

我可以这样做:df['VAL'] = df['A']*df['B']*df['C']*df['D']

但这不会扩展;我想使用cols 变量将这些列相乘。

【问题讨论】:

标签: python pandas dataframe multiplication


【解决方案1】:

使用loc 选择列表中的列,然后跨行使用.prod()(通过指定axis=1)。例如:

>>> cols = ['A','B','C','D']
>>> df = pd.DataFrame(np.random.randint(1, 4, size=(3,4)), columns=list('ABCD'))
>>> df
   A  B  C  D
0  2  2  1  1
1  2  3  1  1
2  3  1  3  3

>>> df['VAL'] = df.loc[:, cols].prod(axis=1)
>>> df
   A  B  C  D  VAL
0  2  2  1  1    4
1  2  3  1  1    6
2  3  1  3  3   27

【讨论】:

  • axis =1 表示我们遍历列?
  • @user308827:这是正确的 - axis=1 表示跨 DataFrame 的列执行该方法。
  • 感谢@ajcr,有道理。我确实在几个地方看到,axis=1 表示跨行的操作。
  • 没问题,很高兴能帮上忙。 axis 在 pandas 中可能需要一点时间来适应:here's an answer 我不久前写过解释哪个轴指的是什么。
【解决方案2】:

我假设您想要该产品,因此对于每一行,您都有该行的 a、b、c 和 d 的乘积。

可以使用apply方法:

df['VAL'] = df.apply(lambda x: x.A * x.B * x.C * x.D,axis=1)

【讨论】:

  • 抱歉,我不想明确使用列名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2017-08-09
  • 2021-09-20
  • 2022-01-23
相关资源
最近更新 更多