如何对Pandas DataFrame和Series使用组合而不是继承

use*_*844 5 python inheritance composition pandas

我很想继承并继承DataFrame用例的pandas子类,但是从我读到的有关良好编程Pandas内部文档的所有内容来看,这样做是不正确的。

举一个简化的例子,我的行DataFrame是人,字段是身高和体重。我很想继承子类,以便可以使用的方法bmi()。我将按以下方式进行操作:

将熊猫作为pd导入

class People(pd.DataFrame):
    def __init__(self, *args, **kwargs):
        super(People, self).__init__(*args, **kwargs)

    def bmi(self):
        return self['weight'] / self['height'] ** 2 x 703

people = People([[172, 74], [100, 60]])
bmi = people.bmi()
Run Code Online (Sandbox Code Playgroud)

我将如何使用合成来做到这一点?会是这样吗?

class People(object):
    def __init__(self, data):
        self.data = pd.DataFrame(data)

    def bmi(self):
        return self.data['weight'] / self.data['height'] ** 2 x 703

people = People([[172, 74], [100, 60]])
bmi = people.bmi()
Run Code Online (Sandbox Code Playgroud)

如果没有,我该怎么办?如果是这样,为什么会更好?

注意:我意识到这是一个过于简化的示例。