2016-04-17 6 views
2

私はExcelファイルにたくさんのデータを持っています。 id列情報に従って重複したレコードを削除することによって、これらのデータを1つのExcelファイルに連結したいと思います。パンダの重複を削除するには?

df1 
    id name date 
0 1 cab 2017 
1 11 den 2012 
2 13 ers 1998 


df2 
    id name date 
0 11 den 2012 
1 14 ces 2011 
2 4 guk 2007 

私は最後にconcantenatedファイルを持っています。

Concat df 
    id name date 
0 1 cab 2017 
1 11 den 2012 
2 13 ers 1998 
1 14 ces 2011 
2 4 guk 2007 

私は以下を試みますが、重複は削除しません。誰もこれを修正する方法をアドバイスできますか?

pd.concat([df1,df2]).drop_duplicates().reset_index(drop=True) 

私の連結データは以下の通りです。重複したIDはまだファイルにあります。

id     created_at   retweet_count 
0 721557296757797000 2016-04-17 04:34:00 21 
1 721497712726844000 2016-04-17 00:37:14 94 
2 721462059515453000 2016-04-16 22:15:33 0 
3 721460623285072000 2016-04-16 22:09:51 0 
4 721460397241446000 2016-04-16 22:08:57 0 
5 721459817651577000 2016-04-16 22:06:39 0 
6 721456334894469000 2016-04-16 21:52:48 0 
7 721557296757797000 2016-04-17 04:34:00 21 
8 721497712726844000 2016-04-17 00:37:14 94 
9 721462059515453000 2016-04-16 22:15:33 0 
10 721460623285072000 2016-04-16 22:09:51 0 
11 721460397241446000 2016-04-16 22:08:57 0 
12 721459817651577000 2016-04-16 22:06:39 0 
13 721456334894469000 2016-04-16 21:52:48 0 

答えて

1

私はあなたが列idによるフィルタリングのためdrop_duplicatesにパラメータsubsetを追加必要があると思う:

print pd.concat([df1,df2]).drop_duplicates(subset='id').reset_index(drop=True) 
    id name date 
0 1 cab 2017 
1 11 den 2012 
2 13 ers 1998 
3 14 ces 2011 
4 4 guk 2007 

EDIT:

私はあなたの新しいデータを試してみて、私のためにそれが動作:

import pandas as pd 

df = pd.DataFrame({'created_at': {0: '2016-04-17 04:34:00', 1: '2016-04-17 00:37:14', 2: '2016-04-16 22:15:33', 3: '2016-04-16 22:09:51', 4: '2016-04-16 22:08:57', 5: '2016-04-16 22:06:39', 6: '2016-04-16 21:52:48', 7: '2016-04-17 04:34:00', 8: '2016-04-17 00:37:14', 9: '2016-04-16 22:15:33', 10: '2016-04-16 22:09:51', 11: '2016-04-16 22:08:57', 12: '2016-04-16 22:06:39', 13: '2016-04-16 21:52:48'}, 'retweet_count': {0: 21, 1: 94, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 21, 8: 94, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0}, 'id': {0: 721557296757797000, 1: 721497712726844000, 2: 721462059515453000, 3: 721460623285072000, 4: 721460397241446000, 5: 721459817651577000, 6: 721456334894469000, 7: 721557296757797000, 8: 721497712726844000, 9: 721462059515453000, 10: 721460623285072000, 11: 721460397241446000, 12: 721459817651577000, 13: 721456334894469000}}, 
        columns=['id','created_at','retweet_count']) 
print df 
        id   created_at retweet_count 
0 721557296757797000 2016-04-17 04:34:00    21 
1 721497712726844000 2016-04-17 00:37:14    94 
2 721462059515453000 2016-04-16 22:15:33    0 
3 721460623285072000 2016-04-16 22:09:51    0 
4 721460397241446000 2016-04-16 22:08:57    0 
5 721459817651577000 2016-04-16 22:06:39    0 
6 721456334894469000 2016-04-16 21:52:48    0 
7 721557296757797000 2016-04-17 04:34:00    21 
8 721497712726844000 2016-04-17 00:37:14    94 
9 721462059515453000 2016-04-16 22:15:33    0 
10 721460623285072000 2016-04-16 22:09:51    0 
11 721460397241446000 2016-04-16 22:08:57    0 
12 721459817651577000 2016-04-16 22:06:39    0 
13 721456334894469000 2016-04-16 21:52:48    0 

print df.dtypes 

id    int64 
created_at  object 
retweet_count  int64 
dtype: object 


print df.drop_duplicates(subset='id').reset_index(drop=True) 
        id   created_at retweet_count 
0 721557296757797000 2016-04-17 04:34:00    21 
1 721497712726844000 2016-04-17 00:37:14    94 
2 721462059515453000 2016-04-16 22:15:33    0 
3 721460623285072000 2016-04-16 22:09:51    0 
4 721460397241446000 2016-04-16 22:08:57    0 
5 721459817651577000 2016-04-16 22:06:39    0 
6 721456334894469000 2016-04-16 21:52:48    0 
+0

それはまだ私のために動作しません。重複したid列は引き続き表示されます。 @jezrael – Behzat

+0

'id'列に重複がありますか?はいの場合は、各データフレームの 'id'列と' dtypes'は同じですか?これを 'print df.dtypes'で確認してください。 – jezrael

+0

はい、dtypesは同じです。idカラムのすべてのデータは数字です。 – Behzat

0

別の方法:

df1.append(df2).groupby('id').first()