Python 多个类的全局变量与多个等效类属性?

Python 多个类的全局变量与多个等效类属性?,python,pandas,Python,Pandas,首先,我意识到已经有很多关于效率的问题,所以如果这是重复的,我很抱歉,但我在这里是因为我找不到我想要的。我将用一个例子来问这个问题: 我有一些时间序列数据,我从excel导入到一个数据框中。它有id | name | date | total | u monthly _rtn列,我正在为报告目的做一些简单的操作(月、3M、YTD、ITD等)。然后,我按id/名称拆分此数据帧,并将其存储在Account对象中: import pandas as ps from pandas.tseries.off

首先,我意识到已经有很多关于效率的问题,所以如果这是重复的,我很抱歉,但我在这里是因为我找不到我想要的。我将用一个例子来问这个问题:

我有一些时间序列数据,我从excel导入到一个数据框中。它有
id | name | date | total | u monthly _rtn
列,我正在为报告目的做一些简单的操作(月、3M、YTD、ITD等)。然后,我按id/名称拆分此数据帧,并将其存储在Account对象中:

import pandas as ps
from pandas.tseries.offsets import YearEnd, DateOffset

class Account(object):
    def __init__(self, df):
        self.name = df['name'][0]
        self.id = df['id'][0]
        self.rtn = ps.TimeSeries(df['total_monthly_rtn'].values, index=ps.DatetimeIndex(df['date'], freq='M'))
        self.m = DateOffset(months=1)


# dataframe mentioned above with 4 columns (id;name;date;total_monthly_rtn)
data = parsexl(src_path) # parsexl not needed for this question

valdate = max(data['date'])
y = YearEnd()

# an example of one slice of 'data'
foo = Account(data[data['id'] == '123456'])

# where 'data[data['id'] == '123456']' looks like:
        id         name                date total_monthly_rtn
0   123456  Bank of Foo 2011-07-31 00:00:00             -2.75
1   123456  Bank of Foo 2011-08-31 00:00:00             -7.63
2   123456  Bank of Foo 2011-09-30 00:00:00             -4.03
3   123456  Bank of Foo 2011-10-31 00:00:00              5.68
4   123456  Bank of Foo 2011-11-30 00:00:00             -1.79
5   123456  Bank of Foo 2011-12-31 00:00:00              0.93
6   123456  Bank of Foo 2012-01-31 00:00:00            3.0773
7   123456  Bank of Foo 2012-02-29 00:00:00            5.4896
8   123456  Bank of Foo 2012-03-31 00:00:00            0.5089
9   123456  Bank of Foo 2012-04-30 00:00:00           -2.0739
10  123456  Bank of Foo 2012-05-31 00:00:00           -6.0472
11  123456  Bank of Foo 2012-06-30 00:00:00            4.7578
12  123456  Bank of Foo 2012-07-31 00:00:00            2.1529
13  123456  Bank of Foo 2012-08-31 00:00:00            1.0867
14  123456  Bank of Foo 2012-09-30 00:00:00            0.3791
15  123456  Bank of Foo 2012-10-31 00:00:00             1.143
16  123456  Bank of Foo 2012-11-30 00:00:00            3.3823
17  123456  Bank of Foo 2012-12-31 00:00:00            0.6535
18  123456  Bank of Foo 2013-01-31 00:00:00            7.3905
19  123456  Bank of Foo 2013-02-28 00:00:00            3.5779
20  123456  Bank of Foo 2013-03-31 00:00:00            2.3466
21  123456  Bank of Foo 2013-04-30 00:00:00            1.6874
22  123456  Bank of Foo 2013-05-31 00:00:00            0.6536
23  123456  Bank of Foo 2013-06-30 00:00:00           -2.7618
24  123456  Bank of Foo 2013-07-31 00:00:00             3.854
25  123456  Bank of Foo 2013-08-31 00:00:00           -3.6812
26  123456  Bank of Foo 2013-09-30 00:00:00            1.9478
27  123456  Bank of Foo 2013-10-31 00:00:00            3.9654
我最初为Account编写了这两个类函数:

    def ytd(self, ye, vd):
        return self.rtn.truncate(before=ye.rollback(vd), after=vd)[1:].sum()

    def year(self, vd):
        return self.rtn.truncate(before=vd-(11*m), after=vd).sum()

# called like:
foo.ytd(y, valdate) # returns 18.9802
foo.year(valdate) # returns 23.016
但后来我开始思考,将valdate和YearEnd存储为类属性会更好吗?从而将这两个功能转变为:

def ytd(self):
    return self.rtn.truncate(before=self.ye.rollback(vd), after=self.vd)[1:].sum()

def year(self):
    return self.rtn.truncate(before=self.vd-(11*m), after=self.vd).sum()
在我的应用程序中,我要处理大约8000行
数据
,代表100个ish帐户,所以这样做或那样做可能不会有很大影响,但一般来说?我的直觉告诉我,第一种方式更好,但如果有人知道他们的东西能让我放松,我会很感激。多谢各位

==编辑==

我在这里只包含了两个类函数,但如果有区别的话,实际上有10个类函数将valdate和YearEnd作为变量

==编辑2==

如果我的例子让一些人感到困惑,我很抱歉。
如果您不知道:rtn=返回;ytd=年初至今

如果问题只是关于性能(或者更准确地说是速度),函数本地查找比属性查找快,因此您当前的解决方案很好。

我确信所有这些变量名称对您都有意义,但“YearEnd”(例如1)对我们来说没有任何意义,您需要选择一些更好的变量名称,并包括更多的代码或一些背景信息,以便我们能够确切地了解您正在做什么。还有,这到底是什么
foo=Account(data[data['id']=='123456'])
您犯了很多语法错误,以及奇怪的编程决策,这使得您更难遵循代码。为了清楚起见,请编辑您的问题。包括一个工作模型和一些示例输入/预期输出。很抱歉,这让您感到困惑。事后看来,我本应该做一个更一般的例子,说明我问题的原则,而不是所有只对我有意义的事情,但我就是这样想到这个问题的。我希望我的编辑能有所帮助。另外,如果你能给我举个例子,说明这些语法错误和奇怪的编程决策,我将不胜感激。是的,这正是我想要的,谢谢。