来自不同数据框的列的数学运算

Posted

技术标签:

【中文标题】来自不同数据框的列的数学运算【英文标题】:Maths Operations on Columns from Different Data Frames 【发布时间】:2016-12-12 04:33:24 【问题描述】:

我有两个数据框,通过 Pandas 从 Fama French 和 Yahoo 导入。我正在尝试比较两个数据框中的列值(更具体地说,从另一个中减去一个),但是每当我尝试这样做时都会出现值错误。数据框有不同的索引,我不知道如何考虑这个因素(我对 python 和 pandas 很陌生)。

这里是有问题的代码:

start, end = dt.datetime.now()-dt.timedelta(days=60*30), dt.datetime.now()
f = data.DataReader('F-F_Research_Data_Factors', 'famafrench',  start, end)[0]
s = data.get_data_yahoo('aapl', start, end)
s = s.resample('M', how='last')
s['returns'] = s['Adj Close'].pct_change()

理想情况下,我想创建一个行值 = f['RF'] - s['returns']

的系列

任何帮助将不胜感激。

【问题讨论】:

数据帧是否总是相同的长度?可以发例子吗? 其中一组有 61 行,而其他 43 行...我想我只想对前 43 行执行操作?但是,最终,我正在构建一个对不同数据帧执行此操作的函数,因此找到一个更普遍适用的解决方案会很棒 【参考方案1】:

问问自己,当两个矩阵的大小不同时,如何定义它们之间的差异?

首先要做的是将两个数据框匹配到一个共同的值(比如日期)。然后你就可以做任何你想做的操作了

【讨论】:

嗨,Noobie,最终我试图找到一种更普遍适用的函数方法,它接收一个数据框(矩阵)并从另一个矩阵的列值中减去它的列值。更具体地说,我试图将股票收益与无风险利率进行比较,以找到风险溢价......这也意味着我必须确保被比较的两个矩阵中的每一个中的行都与相应的月份相关联..这可能并非总是如此...您能提出解决此问题的任何方法吗? 如果最坏的情况发生,我会绕过这个问题,首先取两列(无风险和股票收益)的平均值,然后计算差异......但是这会让结果不太准确,这就是我试图避免这种方法的原因【参考方案2】:

转换f.index

f.index = f.index.to_datetime() + pd.offsets.MonthEnd()

f['RF'] - s['returns']

【讨论】:

这就是我所说的。这里数据框可以对齐。继续接受这个答案。顺便说一句,我希望你不要对我投反对票! 谢谢!完美运行!

以上是关于来自不同数据框的列的数学运算的主要内容,如果未能解决你的问题,请参考以下文章

将不同的函数应用于按名称选择函数的数据框的列

具有 1 个不同的列和来自另一列的总和值 [关闭]

从旧数据帧创建一个新数据帧,其中新数据帧包含旧数据帧中不同位置的列的行平均

如何计算不同数据框的列之间的数值差异?

将pyspark数据框的列转换为小写

python 将某数据框的列的值依照逗号再建立新的列