将 Pandas 数据框中的所有列相乘

Posted

技术标签:

【中文标题】将 Pandas 数据框中的所有列相乘【英文标题】:Multiply all columns in a Pandas dataframe together 【发布时间】:2013-05-01 16:24:21 【问题描述】:

是否可以将Pandas.DataFrame 中的所有列相乘以获得 DataFrame 中每一行的单个值?

例如,使用

df = pd.DataFrame(np.random.randn(5,3)*10)

我想要一个新的DataFramedf2,其中df2.ix[x,0] 的值为df.ix[x,0] * df.ix[x,1] * df.ix[x,2]

但是我不想硬编码,我怎样才能使用循环来实现呢?

我找到了一个函数 df.mul(series, axis=1),但不知道如何将它用于我的目的。

【问题讨论】:

【参考方案1】:

你可以使用DataFrame.prod():

>>> df = pd.DataFrame(np.random.randint(1, 10, (5, 3)))
>>> df
   0  1  2
0  7  7  5
1  1  8  6
2  4  8  4
3  2  9  5
4  3  8  7
>>> df.prod(axis=1)
0    245
1     48
2    128
3     90
4    168
dtype: int64

您也可以apply np.prod,这是我最初所做的,但通常在可用时直接方法更快。

>>> df = pd.DataFrame(np.random.randint(1, 10, (5, 3)))
>>> df
   0  1  2
0  9  3  3
1  8  5  4
2  3  6  7
3  9  8  5
4  7  1  2
>>> df.apply(np.prod, axis=1)
0     81
1    160
2    126
3    360
4     14
dtype: int64

【讨论】:

以上是关于将 Pandas 数据框中的所有列相乘的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:将依赖于第三列的相同数据框的两列相乘

如何将数据框中的特定列与同一数据框中的一个特定列相乘?

Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)

将两个数据框相乘,基于列并且跳过行不满足条件

假设某个元素与 R 中的 CSV 文件的文件名相同,则将数据框中的某个元素相乘

如何有效地将 PySpark 数据框中的行相乘?