2012-05-30 81 views
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上進行某種索引或某種操作,以便我可以使用每組中的第一條記錄?

回答

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