2017-08-15 20 views
3

リスト - として1列を維持:今すぐデータフレームから重複行を削除するが、私はこのようなデータフレーム持っているPythonの

file: 
     | FIRST | LAST | ID | 
--------------------------- 
0  "ABC"  12 35 
1  "ABC"  14 35 
2  "AB"  15 36 

を、私が欲しいのです。この問題については

file: 
     | FIRST | LAST | ID | 
--------------------------- 
0  "ABC" [12,14] 35 
2  "AB"  15  36 

のがあることを想定してみましょう2行のIDが等しい場合、LASTを除くすべての値も同じです。

したがって、リストに追加されたlastの値を除くすべての値を置き換えます。

私は、このリンクで与えられた解決策使用してみました:

ID 
35 [12, 14] 
36  [15] 
Name: Last, dtype: object 

おそらく、私は何かが欠けています:これは私が得た出力である

file = file.groupby('ID') 

file = file['Last'].unique() 

:私はこれを使用し Pandas DataFrame - Combining one column's values with same index into list

をgroupby()の中で。事前に

感謝:)

UPDATE:

私の元データフレームは、100の以上の列があります。 2行のIDが等しい場合、LASTを除くすべての値も同じです。

答えて

1

与えられたIDで最後の2行だけが異なる場合、groupbyを適用するときに最初の値をとるだけです。 `LAST '列の場合は、その値を使用するか、複数の項目がある場合は一意項目のリストに変換します。

grouping_cols = ['ID', ...] 
agg_cols = {col: 'first' for col in df if col not in grouping_cols} 
agg_cols['LAST'] = lambda x: x.unique().tolist() if len(x) > 1 else x.iat[0] 
>>> df.groupby(grouping_cols, as_index=False).agg(agg_cols) 
    ID  LAST FIRST 
0 35 [12, 14] ABC 
1 36  15 AB 
+0

これは私にとって完璧に機能します。ありがとう –

+0

複数の列を使ってgroupby()にしたいのですが? –

+0

上記の編集を参照してください。 – Alexander

2

これはあなたが望むものですか?

df.groupby(['FIRST', 'ID']).LAST.apply(lambda x: x.tolist()).reset_index() 

    FIRST ID LAST 
0 AB  36 [15] 
1 ABC  35 [12, 14] 
+0

私のデータフレームには100以上のカラムがありますので、groupbyに['First'、 'ID']を置くと、他のカラムはすべてそこにありません。 –

+0

その場合、他の列でも集計する必要がありますが、リストにも同様にしたいですか? – Vaishali

+0

質問で言及したように、IDの値が2つの行で等しい場合、LASTを除く他のすべての列の値も同じです。 –

関連する問題