2017-11-14 4 views
1

私はパンダの初心者で、カスタム条件に基づいて新しい列を追加する機能を作成する際に問題があります。 以下は私のデータフレームです特定の列に重複を示す新しい列をパンダデータフレームに追加する

c1  c2  c3   c4    c5 
0 1234 888 36.12733265 -115.1710473 7048929337 
1 2341 70  33.62503113 -111.928576  7048929337 
2 8910 419 40.734631 -73.8700321  9192939495 
3 8910 910 40.734631 -73.8700321  9192939495 
4 5678 1295 40.719729 -73.84412  5109400188 
5 3345 4976 33.5350596 -112.2670918 9192939495 
6 233345 2364 33.5350596 -112.2670918 4806391796 
7 3010 1155 42.8254528 -71.5012724  2393900772 
8 3010 6800 41.0488534 -75.313324  8434975913 
9 4534 1791 42.955875 -76.92238325 9048190206 
10 7658 4711 40.7635948 -73.3066489  6312542029 
11 7658 9120 34.8465348 -117.0854289 6312542029 

dupという名前の新しい列を追加します。この列には、その行が重複しているかどうか(特定の列に関して重複しているかどうか)を示すフラグが含まれています。 優先順位は、次の順序である:

1)行は、C3およびC4の両方の点で重複している場合、フラグは

2 dup_c3c4なければならない)他の行がフラグべき、C5の点で重複している場合他のフラグは、NAD(ません重複)でなければならない)行がC1の点で重複している場合、フラグは

4 dup_c1なければならない他)

3 dup_c5です。

予想される出力:

c1  c2  c3   c4   c5   DUP 
0 1234 888  36.12733265 -115.1710473 7048929337 dup_c5 
1 2341 70  33.62503113 -111.928576 7048929337 dup_c5 
2 8910 419  40.734631 -73.8700321 9192939495 dup_c4c5 
3 8910 910  40.734631 -73.8700321 9192939495 dup_c4c5 
4 5678 1295 40.719729 -73.84412  5109400188 NaD 
5 3345 4976 33.5350596 -112.2670918 9192939495 dup_c4c5 
6 233345 2364 33.5350596 -112.2670918 4806391796 dup_c4c5 
7 3010 1155 42.8254528 -71.5012724 2393900772 dup_c1 
8 3010 6800 41.0488534 -75.313324  8434975913 dup_c1 
9 4534 1791 42.955875 -76.92238325 9048190206 NaD 
10 7658 4711 40.7635948 -73.3066489 6312542029 dup_c5 
11 7658 9120 34.8465348 -117.0854289 6312542029 dup_c5 

いずれかがある場合、他のまたは任意の他の効率的な方法で使用してこのシナリオのためにカスタム関数を作成する方法を私にお勧めできます。 3つの異なる条件のためduplicated

+0

は(偽=保ちます)上記の4つのケースのそれぞれについて..しかし、私はいくつかのカスタム関数を使用して列にこれらを組み合わせたい..これを達成するための方法はありますか? –

答えて

1

使用numpy.select

m1 = df.duplicated(['c3','c4'], keep=False) 
m2 = df.duplicated(['c5'], keep=False) 
m3 = df.duplicated(['c1'], keep=False) 

df['DUP'] = np.select([m1,m2,m3],['dup_c3c4','dup_c5','dup_c1'], default='NaD') 
print (df) 
     c1 c2   c3   c4   c5  DUP 
0  1234 888 36.127333 -115.171047 7048929337 dup_c5 
1  2341 70 33.625031 -111.928576 7048929337 dup_c5 
2  8910 419 40.734631 -73.870032 9192939495 dup_c3c4 
3  8910 910 40.734631 -73.870032 9192939495 dup_c3c4 
4  5678 1295 40.719729 -73.844120 5109400188  NaD 
5  3345 4976 33.535060 -112.267092 9192939495 dup_c3c4 
6 233345 2364 33.535060 -112.267092 4806391796 dup_c3c4 
7  3010 1155 42.825453 -71.501272 2393900772 dup_c1 
8  3010 6800 41.048853 -75.313324 8434975913 dup_c1 
9  4534 1791 42.955875 -76.922383 9048190206  NaD 
10 7658 4711 40.763595 -73.306649 6312542029 dup_c5 
11 7658 9120 34.846535 -117.085429 6312542029 dup_c5 

必要機能の場合:私はDF [ 'COLUMN_NAME']を使用して新しいデータフレームを作成しようとしました重複

def f(df): 
    m1 = df.duplicated(['c3','c4'], keep=False) 
    m2 = df.duplicated(['c5'], keep=False) 
    m3 = df.duplicated(['c1'], keep=False) 

    df['DUP'] = np.select([m1,m2,m3],['dup_c3c4','dup_c5','dup_c1'], default='NaD') 
    return df 

df1 = f(df) 
+0

ありがとう..私もこれを試しました..しかし、あなたは機能を介して同じものを達成する方法を提案してください..私は同じ機能を書くのに問題があった –

+0

素晴らしい... !!どうもありがとう..!! –

関連する問題