如何将 Pandas 数据框中的每一行乘以不同的值

25

我正在尝试将pandas数据框的每一行乘以不同的值,并想知道最好的方法是什么。

例如,如果我有以下数据框:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(2, 3))
df
     0          1           2
0   -1.283316   0.849488    1.936060
1   -2.078575   -0.871570   -0.970261

我想要用列表或数组中的不同元素来乘以每一行的每个元素:vals = [1, 100]
在这个例子中,我希望第一行中的每个项目都乘以1,第二行中的每个项目都乘以100。
因此,结果应该是:
     0          1           2
0   -1.283316   0.849488    1.936060
1   -207.8575   -87.1570    -97.0261

我已经尝试了:

df * vals
df.multiply(vals)
df.multiply(vals, axis=1)

这些都不起作用,虽然根据我对该代码应该完成的任务的理解,我并没有期望它们会。我无法找到一种简洁的方式来使用 pandas 完成这个任务。

2个回答

29

这个方法是mul

df.mul([1, 100], axis=0)
Out[17]: 
            0          1         2
0   -1.198766  -1.340028  1.990843
1  113.890468 -68.177755 -9.060228

1
最棒的方法是在axis=0上使用mul。话虽如此,为了让*起作用,我们需要一个列数组,其中行数与框架的行数相匹配。因此以下操作可行。
vals = np.array([1, 100])
df1 = df * vals[:, None]

# or to modify the original frame
df *= vals[:, None]

res


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接