14

Hadley のR 用plyrパッケージは非常に役に立ち、データを変換するための優れた DSL だと思います。解決される問題は非常に一般的であるため、R でデータを操作するのではなく、他のプログラミング言語でデータを操作するときに、他のユース ケースに直面します。

Pythonで同様のことを行うモジュールが存在するかどうかを知っている人はいますか? 何かのようなもの:

def ddply(rows, *cols, op=lambda group_rows: group_rows):
    """group rows by cols, then apply the function op to each group
       and return the results aggregating all groups
       rows is a dict or list of values read by csv.reader or csv.DictReader"""
    pass

実装するのはそれほど難しいことではありませんが、既に存在していれば素晴らしいことです。私はそれを実装し、 でitertools.groupbyグループ化してから関数colsを適用し、opitertools.chain を使用してすべてをチェーンします。より良い解決策はありますか?

4

1 に答える 1

8

これは私が起草した実装です:

def ddply(rows, cols, op=lambda group_rows: group_rows): 
    """group rows by cols, then apply the function op to each group 
    rows is list of values or dict with col names (like read from 
    csv.reader or   csv.DictReader)"""
    def group_key(row):                         
        return (row[col] for col in cols)
    rows = sorted(rows, key=group_key)
    return itertools.chain.from_iterable(
        op(group_rows) for k,group_rows in itertools.groupby(rows, key=group_key)) 

opもう 1 つのステップは、sumなどのユーティリティ関数として適用できる定義済み関数のセットを用意することです。

于 2011-06-22T02:11:57.790 に答える