Python将类方法应用于数据帧行

时间:2016-01-06 10:04:02

标签: python pandas vectorization

我的类使用一行数据帧来构造一个对象,我想通过将init应用于数据帧的每一行来创建一个对象数组。有没有办法对此进行矢量化?我的班级定义看起来像

class A(object):
    def __init__(self,row):
        self.a = row['a']
        self.b = row['b']

任何建议都将受到高度赞赏!

我有一种方法,我不满意解决这个问题。在类之外定义另一个函数,然后使用apply。

def InitA(row):
    return A(row)

假设df是我想用作参数的数据帧。

xxx = df.apply(InitA,axis=1)

给出我想要的东西。但是,我不认为InitA是必要的。

我原来的问题有点复杂。类定义是

class A(object):
    def __init__(self):
        return
    def add_parameter(self,row):
        self.a = row['a']

我打算将add_parameter应用于数据框的每一行。但我认为定义另一个(lambda)函数是解决这个问题的必要条件。

1 个答案:

答案 0 :(得分:1)

只使用lambda函数?

xxx = df.apply(lambda x: A(x),axis=1)

编辑: 另一种解决方案是直接传递类,然后apply-function调用构造函数:

xxx = df.apply(A,axis=1)

这有效:

import pandas as pd 

class C(object):
    def __init__(self,dat):
        return

A = pd.DataFrame({'a':pd.Series([1,2,3])})
A.apply(lambda x: C(x),axis=1)