2017-11-05 1 views
1

こんにちは私はPythonには新しく、現在はPythonバージョン3.xを使用しています。私はcsvでフィルタリングするために必要な非常に大きなデータセットを持っています。私はオンラインで検索し、多くはpandas DataFrameにロードすることを推奨しました(完了)。Python 3.x pandas重複を比較し、行をcsvの上位の値にドロップする方法は?

私の列のように定義することができます:「ID」、「名前」、「時間」、私は任意の重複を「トークン」の下にチェックする必要があり、「トークン」、「テキスト」

- 行うことができます

経由DF =のDF [df.Token.duplicate(= Falseを保つ)]

(私が間違っているなら、私を修正してください)

しかし、問題は、私は維持する必要があり、元の行はwhile他の重複を削除します。このために、私はそれを「時間」と比較するように言われました。最小の値を持つ「時間」は元の値(保持)になり、残りの複製は削除されます。例えば

ID名タイムトークンテキスト

1 |ジョン| 333 |こんにちは| xxxx

2 |メアリー| Mary 233 | Hiiii | xxxx

3 | Jame | 222 |こんにちは| xxxx

4 |ケン| 555 |こんにちは| XXXX

所望の出力:

2 |メアリー| Mary 233 | Hiiii | xxxx

3 | Jame | 222 |こんにちは|私は立ち往生午前どこ

##compare and keep the smaller value 
    def dups(df): 
     return df[df["Time"] < df["Time"]] 

df = df[df.Token.duplicate()].apply(dups) 

これはおおよそ次のとおりです。私が行っている何xxxxの

!誰も助けることができますか? Pythonで私の初めてのコーディングは、どんな助けも大歓迎です。

+0

'df = df.drop_duplicates(サブセット= ['トークン'、キープ= 'ファースト')' –

+0

ここで重要な順序ですか?そうでなければ、 'Time'をソートすることができます。そして、' drop_duplicates'が最小の行を保つことが保証されます。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅHellooo、私は知っている限り(私は多分間違っています)、最初のエントリを保持していますが、最初のエントリを保持していますが、私は何千もの行と "時間"がすべてランダムに記録されています最初のエントリがより高い値を持つ可能性があります。比較する方法はありますか(「時間」に基づいて)ですか?だから私はより小さい値を保つことができます –

答えて

1

使用sort_values + drop_duplicates

df = df.sort_values('Time')\ 
     .drop_duplicates('Token', keep='first').sort_index() 
df 

    ID Name Time Token Text 
1 2 Mary 233 Hiiii xxxx 
2 3 Jame 222 Hello xxxx 

最終sort_indexコールは、元のデータフレームに順序を復元します。この点を超えて単調に増加するインデックスを取得する場合は、reset_indexに電話してください。

+0

Oooohhhhh ......それを得た、今私は理解した sooooooありがとう..... –

関連する問題