読者です 読者をやめる 読者になる 読者になる

pandas.groupbyでaggに自作関数を渡す、要素にnumpy.arrayを使う。

import pandas as pd
import numpy as np


def g(x):
    y = None
    for i, a in x.iteritems():
        if y is None:
            y = a.copy()
        else:
            y += a
    return Foo(y)


class Foo:
    def __init__(self, x):
        self.x = x

    def __str__(self):
        return str(self.x)


if __name__ == '__main__':
    df = pd.DataFrame({'a': [1, 1, 2], 'b': [np.array([1, 2]), np.array([1, 2]), np.array([1, 2])]})
    x = df.groupby('a').agg({'b': g})
    print(repr(x))
    print(repr(df))