python - 将 Dataframe 行与 numpy 数组相乘

标签 python arrays pandas numpy

我有一个如下所示的 DataFrame:

         Date   Last  portfolioID FinancialInstrument
1   2018-03-28  64.67            1                 Oil
2   2018-03-29  64.91            1                 Oil
3   2018-04-02  62.85            1                 Oil
4   2018-04-03  63.57            1                 Oil
5   2018-04-04  63.56            1                 Oil
6   2018-04-05  63.73            1                 Oil
7   2018-04-06  61.93            1                 Oil
8   2018-03-23  65.74            3                 Oil
9   2018-03-26  65.49            3                 Oil
10  2018-03-27  64.67            3                 Oil
11  2018-03-28  64.67            3                 Oil
12  2018-03-29  64.91            3                 Oil
13  2018-04-02  62.85            3                 Oil
14  2018-04-03  63.57            3                 Oil
15  2018-04-04  63.56            3                 Oil
16  2018-04-05  63.73            3                 Oil
17  2018-04-06  61.93            3                 Oil
18  2018-04-02  62.85            5                 Oil
19  2018-04-03  63.57            5                 Oil
20  2018-04-04  63.56            5                 Oil
21  2018-04-05  63.73            5                 Oil
22  2018-04-06  61.93            5                 Oil

和一个看起来像这样的 NumPy 数组:

[ 152.69506795   76.05719501  127.28719173]

我正在使用 portfolioID 对 DataFrame 进行分组,其中第一个分组与 NumPy 数组中的第一个值相关,第二组与 NumPy 数组中的第二个值相关,等等。我的问题是,是否存在一种方法可以将 DataFrame 中的 Last 列与其相应的 NumPy 数组值相乘?

这就是我所拥有的,但我收到一条错误消息,指出“长度必须相等”。 shares 是 NumPy 数组:

for pid, group in data.groupby('portfolioID'):
    lastCol = group.Last
    clumN = lastCol.multiply(shares, axis=0)

最佳答案

您可以使用 pandas.Series.factorize 将索引获取到您的值数组中,并使用这些索引来获取要乘以的适当数组。

val_arr = np.array([152.69506795, 76.05719501, 127.28719173])

df.Last * val_arr[df.portfolioID.factorize()[0]]

# 1     9874.790044
# 2     9911.436861
# 3     9596.885021
# 4     9706.825470
# 5     9705.298519
# 6     9731.256680
# 7     9456.405558
# 8     5000.000000
# 9     4980.985701
# 10    4918.618801
# 11    4918.618801
# 12    4936.872528
# 13    4780.194706
# 14    4834.955887
# 15    4834.195315
# 16    4847.125038
# 17    4710.222087
# 18    8000.000000
# 19    8091.646778
# 20    8090.373906
# 21    8112.012729
# 22    7882.895784
# Name: Last, dtype: float64

关于python - 将 Dataframe 行与 numpy 数组相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49725025/

相关文章:

python - 如何在 Windows 7 上获取结构执行 (fab.exe) 的输出?

Javascript 数组元素消失

arrays - 掉落(其中 : {}) remove(where: {}) function in Swift?

python - Pandas Apply 函数返回两个新列

python - 在 Python Pandas DataFrame 中设置索引名称的最佳方法

python - 如何通过在一个函数中包含所有类型的填充来处理缺失值?

python - _io.TextIOWrapper'对象不可调用

python - ESPN.com Python 网页抓取问题

python - 查找最多 3 个变量的函数不返回任何内容

java - 在不使用 HashMap 的情况下查找排序的 ArrayList 中最常见的字符串