2017-06-08 8 views
1

私は約200万行のデータフレームを持っています。私がこのグループをすればpandas groupby sumには時間がかかりますが、どうすれば最適化できますか?

df = df.groupby(by=['country','os','device'], as_index=False) 

ほんの少し時間がかかります。しかし、私がしている場合:

df = df.groupby(by=['country','os','device'], as_index=False).sum() 

それは永遠にかかるし、私はスクリプトを殺す必要があります。

これは私がパンダ17から

20に更新したときですが、なぜでしょうし、それが再び高速に動作しますので、どのように私はそれを書き換えることができます始めましたか?

EDIT:

nl,windows,c,awdo2323fa3rj90 
    uk,mac,c, awdawdoj93di303 
    nl,ios,m, aawd9efri403 
    nl,ios,m, 39fnsefwfpiw3r 

EdChumはGROUPBY戻り、私は(和を加えた)、これは被加工物GROUPBY言ったように[国、OS、デバイス、md5_id] 出力

nl,windows,c 
    uk,mac,c 
    nl,ios,m 

なければなりませんパンダ17では、しかし、私はこれは今は20の問題を引き起こしていると思う、なぜなら数字の列がないからです。

+0

'自体によってgroupby'は単なるオブジェクトでの合格subsetに基づく非繰り返し行されるように、グループ化をどのようにしてメタデータだけにするかを記述します。オブジェクトに対して実際に何らかの集約を実行するときは、実際の作業が行われるときです。 groupby列のカラムまたは欠損値にdtypesが混在していますか? – EdChum

+0

@EdChumデータが欠落していないことを確認し、すべての列がオブジェクトであることを確認しました。だから多分sum()演算がPandas 20でもう正しくないのでしょうか?私は4列の文字列を持っており、3列(国、OS、デバイス)の一意の値を持っています – user3605780

+0

残念ながら、数値ではない列を 'sum'しようとしていますか?代表的なサンプルデータと希望の出力を投稿できますか? – EdChum

答えて

1

groupbyオブジェクトは単にメタデータであり、グループ化を実行する方法を説明しています。数字列を持たないため、集計関数を呼び出すと機能しませんsumに電話することで期待していることを確認してください。

あなたが望むすべてがdrop_duplicatesにあるように見えます:

df.drop_duplicates(subset=['country','os','device']) 

何残っていることは、列

関連する問題