2017-12-29 34 views
0

私はこのような慎重にソートされたデータフレームを持っている:ソートせずにグループを反復処理する方法は?

x = pd.DataFrame({'col1':['b', 'e','e', 'g','g', 'f','f'], 
        'col2':['f', 'g','f', 'f','e', 'g','e'], 
        'col3':[ 1 , 7 , 2 , 6 , 7 , 20, 5 ]}) 

私は順序

names, totals, fs = zip(* list((name, total(group), f(group)) for name, group in x.groupby('col1')) ) 

out = pd.DataFrame({'lang':names, 
         'total':totals, 
         'partners':tails}) 

しかしoutに行がcol1によって並べ替えられていますを維持し、1行ごとにグループを集計します。 x.groupby('col1').heads()[name for name, _ in x.groupby('col1')]戻っ「F」が「G」の後ろにとどまるべき['b', 'e', 'f', 'g']

どのようにソートすることなく、グループを通じて、私がループすることができます?のように反復し、正しい順序ですべてのものをもたらしている間

+1

'groupby(" col1 "、sort = False)は必要なものを与えますか?期待される成果をあげた最小限の例を掲示すればよいだろう。 – Cleb

+1

@Clebは私が必要なすべてです!どうもありがとうございます!私はドキュメントをチェックすべきだったが、私はあなたがそれを無効にできるとは思わなかった... – peer

答えて

3

コメントで述べたように、あなたが必要とするすべては

the documentationから撮影
groupby("col1", sort=False) 

です:

ソート:ブール値、デフォルトはTrue

ソートグループキー。これをオフにしてパフォーマンスを向上させます。これは、各グループ内の観測の順序には影響しないことに注意してください。 groupbyは、各グループ内の行の順序を保持します。

関連する問題