2

グループ化してグループの最初の要素の値を取得したいデータフレーム(「csv」と呼びましょう)があります。例:

A   B   C  D
foo bar happy yellow
foo bar sad   green
foo ape last  laugh

私はこれを出力として欲しい:

A   B   C
foo bar happy
foo ape last

私は現在これを行っています:

grp1 = csv.groupby(['A','B'])
lst = [(A,B,csv.ix[group[0]]['C']) for (A,B),group in grp1.groups.items()]
df = DataFrame(lst,columns=['A','B','C'])
df.to_csv('grp.csv',cols=['A','B','C'],index=False)

しかし、これは非効率的なようです。最初にリストを作成してdataframeから、そこからリストを作成する必要がありますか?直接作成する方法dataframeや、オリジナルに何らかのインデックスを付けてdataframe、各グループの最初のレコードを操作できるようにする方法はありませんか?

4

1 に答える 1

1

を使用aggregateして集計関数を定義できます。これにより、列の最初の要素が保持され、他の要素は削除されます。

    In [60]: grp = df.groupby(['A', 'B'])

    In [61]: grp.aggregate({'C': lambda c: c.ix[c.first_valid_index()]})
    Out[61]:
                 C
    A   B  
    foo ape   last
        bar  happy
于 2012-05-31T08:11:17.123 に答える