猿问

如何从具有匹配索引的数据框中减去序列

我有一个DataFrame带有多个列的,一个Series。两者具有相同的特征DateTimeIndex。


我想从中的每一行的Series所有值中减去的每一行的值DataFrame


这是我的示例数据:


dates   = pandas.date_range('20180101', periods=10)

stocks  = ['AAPL', 'GOOG', 'MSFT', 'AMZN', 'FB']

data    = numpy.random.randn(10,5)

prices  = pandas.DataFrame(index=dates, columns=stocks, data=data)

returns = prices.pct_change(1)

这使我DataFrame类似于以下内容

然后创建我的Series,这是一篮子股票的回报

basket = returns.mean(axis=1)

这使我Series类似于以下内容

http://img.mukewang.com/607e90af0001529f02010190.jpg

现在我想从每只股票的收益中减去一揽子收益:


excess_ret = returns - basket

我收到以下警告:


RuntimeWarning: Cannot compare type 'Timestamp' with type 'str', sort order is

undefined for incomparable objects

  return this.join(other, how=how, return_indexers=return_indexers)

这是结果DataFrame:

http://img2.mukewang.com/607e90bf000194c609830446.jpg

曾经在中工作pandas-0.16.2,但我现在正在使用pandas-0.22.0,看来我现在无法SeriesDataFrame具有匹配项的a中减去a Indexes

问题:

  • 我当前正在执行的减法操作中发生了什么?

  • 如何从中的每一行的Series所有值中减去中的每一行的值DataFrame


一只名叫tom的猫
浏览 98回答 1
1回答

Cats萌萌

我认为需要sub带有参数axis=0的匹配索引,DataFrame该索引的索引为Series:轴:{0,1,'索引','列'}对于系列输入,轴与系列索引匹配excess_ret = returns.sub(basket, axis=0)print (excess_ret)                AAPL      GOOG      MSFT      AMZN        FB2018-01-01       NaN       NaN       NaN       NaN       NaN2018-01-02 -1.833226 -0.110935  0.455586 -0.173553  1.6621272018-01-03 -0.662713  1.737714 -1.295243  1.381853 -1.1616112018-01-04  3.269817 -0.824819  0.377973 -0.788368 -2.0346042018-01-05 -0.082528  1.814466  2.295359 -3.543489 -0.4838082018-01-06  0.295950  2.978380  1.000856  1.346977 -5.6221642018-01-07  1.988864 -2.316191  0.633370  1.043901 -1.3499432018-01-08 -2.640122 -0.861669 -1.472634 -1.559951  6.5343762018-01-09  8.062484 -1.712583 -2.497513 -0.807566 -3.0448222018-01-10 -1.823915  0.370618 -0.883559  0.888679  1.448177如果要按列匹配:a = returns.mean(axis=0)print (a)AAPL    0.088224GOOG   -1.301244MSFT   -2.436290AMZN   -1.009339FB     -0.102484dtype: float64excess_ret = returns.sub(a, axis=1)print (excess_ret)                AAPL      GOOG       MSFT      AMZN        FB2018-01-01       NaN       NaN        NaN       NaN       NaN2018-01-02 -1.353102  1.441870   5.759181  0.421661 -0.6085082018-01-03 -0.434575 -0.969659   0.665239  0.823154  4.9176332018-01-04  8.771575 -2.722012   0.409977 -2.113780 -1.1646152018-01-05 -0.220083  0.213942   1.329937 -0.372537  0.0372172018-01-06 -0.633686  6.371478 -14.157027 -0.831583  1.2269922018-01-07 -2.363521  0.130848   1.743317 -1.381718 -1.9295832018-01-08 -3.062185 -6.431137   0.438800  0.956752 -1.6416232018-01-09 -0.450300  2.093572   2.965726 -0.617335  1.0422342018-01-10 -0.254123 -0.128903   0.844849  3.115386 -1.879747
随时随地看视频慕课网APP

相关分类

Python
我要回答