Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas:根据列查找每个列的日志,该日志由另一个数据帧中的标量除以_Python_Pandas_Dataframe - Fatal编程技术网

Python pandas:根据列查找每个列的日志,该日志由另一个数据帧中的标量除以

Python pandas:根据列查找每个列的日志,该日志由另一个数据帧中的标量除以,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框架,如下所示: df = pandas.DataFrame(index=pandas.date_range('20200101', '20200107'), columns=['foo', 'bar', 'baz'], data=numpy.random.rand(7,3)) 我为每一列提供了另一个系数数据框架: fac = pandas.DataFrame(index=['foo','b

我有一个数据框架,如下所示:

df = pandas.DataFrame(index=pandas.date_range('20200101', '20200107'), 
                      columns=['foo', 'bar', 'baz'], 
                      data=numpy.random.rand(7,3))
我为每一列提供了另一个系数数据框架:

fac = pandas.DataFrame(index=['foo','bar','baz'],
                       data={'factor':[1,2,3]})
我想计算每行的日志,除以相应列的因子

类似于:

numpy.log(df['foo']) / fac['foo'] # for each column, foo, bar, baz
我找到了以下解决方案,它创建了
df
的一个副本,然后迭代每一列,将复制的数据帧中的值设置为我要计算的表达式的结果

res = df.copy()
for c in df.columns:
    res[c] = numpy.log(df[c]) / fac.loc[c].values
它可以工作,但感觉不太符合人体工程学


是否有更好的推荐方法来实现同样的效果(理想情况下是在一行程序中)?

您可以将一个数据帧除以一个序列。这样,Pandas会将数据框的列与序列的索引对齐。因此,这可以通过以下方式实现:

np.log(df)/fac['factor']
输出:

                 foo       bar       baz
2020-01-01 -0.444202 -0.843502 -0.067856
2020-01-02 -0.483475 -0.412455 -0.095510
2020-01-03 -1.089267 -0.300139 -0.137919
2020-01-04 -0.078742 -0.289426 -0.358474
2020-01-05 -0.496684 -0.197137 -0.471769
2020-01-06 -0.777344 -0.101580 -0.724069
2020-01-07 -0.246572 -0.072361 -0.156279

就这么简单!非常感谢。祝贺10万@MarkSetchell谢谢:-)
print(res)

                 foo       bar       baz
2020-01-01 -0.444202 -0.843503 -0.067856
2020-01-02 -0.483475 -0.412456 -0.095510
2020-01-03 -1.089267 -0.300139 -0.137919
2020-01-04 -0.078743 -0.289427 -0.358474
2020-01-05 -0.496685 -0.197138 -0.471769
2020-01-06 -0.777345 -0.101580 -0.724067
2020-01-07 -0.246572 -0.072361 -0.156279
np.log(df)/fac['factor']
                 foo       bar       baz
2020-01-01 -0.444202 -0.843502 -0.067856
2020-01-02 -0.483475 -0.412455 -0.095510
2020-01-03 -1.089267 -0.300139 -0.137919
2020-01-04 -0.078742 -0.289426 -0.358474
2020-01-05 -0.496684 -0.197137 -0.471769
2020-01-06 -0.777344 -0.101580 -0.724069
2020-01-07 -0.246572 -0.072361 -0.156279