【发布时间】:2020-05-29 03:40:17
【问题描述】:
我正在使用组合方法创建一个包含 pandas 数据框的类,如下所示。我正在通过对基列进行一些操作来创建derived 属性。
import numpy as np
import pandas as pd
class myclass:
def __init__(self, *args, **kwargs):
self.df = pd.DataFrame(*args, **kwargs)
@property
def derived(self):
return self.df.sum(axis=1)
myobj = myclass(np.random.randint(100, size=(100,6)))
d = mc.derived
derived 的计算是一个昂贵的步骤,因此我想缓存这个函数。我想用functools.lru_cache 做同样的事情。但是,它要求对原始对象进行散列处理。我尝试为该对象创建一个__hash__ 函数,详见此答案https://stackoverflow.com/a/47800021/3679377。
现在我遇到了一个新问题,哈希函数是一个昂贵的步骤!。有没有办法解决这个问题?还是我走到了死胡同?
有没有更好的方法来检查数据帧是否已被修改,如果没有,则继续返回相同的哈希值?
【问题讨论】:
-
'我正在通过扩展 pandas 数据框来创建自定义类,如下所示。' - 你没有延长。您有一个包含数据框的类。见packetflow.co.uk/python-inheritance-vs-composition
-
没错,我正在使用合成。我会这样重新构建我的问题。只是我去了熊猫帮助页面的标题。 pandas.pydata.org/pandas-docs/stable/development/extending.html
-
在
self.df没有改变的情况下,是否要避免计算derived? -
是的。没错。
-
您想只处理
derived操作还是希望拥有一个可以扩展到此数据帧上的其他一些操作的系统?