10

一連の列に重複する値を持つ pandas DataFrame があります。例えば:

df = pd.DataFrame({'Column1': {0: 1, 1: 2, 2: 3}, 'Column2': {0: 'ABC', 1: 'XYZ', 2: 'ABC'}, 'Column3': {0: 'DEF', 1: 'DEF', 2: 'DEF'}, 'Column4': {0: 10, 1: 40, 2: 10})

In [2]: df
Out[2]: 
   Column1 Column2 Column3  Column4 is_duplicated  dup_index
0        1     ABC     DEF       10         False          0
1        2     XYZ     DEF       40         False          1
2        3     ABC     DEF       10          True          0

行 (1) と (3) は同じです。基本的に、行 (3) は行 (1) の複製です。

次の出力を探しています。

Is_Duplicate行が重複しているかどうかを含む[データフレーム列(Column2、Column3、およびColumn4)で「重複」メソッドを使用して実行できます]

Dup_Index重複行の元のインデックス。

In [3]: df
Out[3]: 
   Column1 Column2 Column3  Column4  Is_Duplicate  Dup_Index
0        1     ABC     DEF       10         False          0
1        2     XYZ     DEF       40         False          1
2        3     ABC     DEF       10          True          0
4

2 に答える 2

18

duplicated最初の列にはDataFrameメソッドがあります。

In [11]: df.duplicated(['Column2', 'Column3', 'Column4'])
Out[11]: 
0    False
1    False
2     True

In [12]: df['is_duplicated'] = df.duplicated(['Column2', 'Column3', 'Column4'])

2番目を行うには、次のようなことを試すことができます。

In [13]: g = df.groupby(['Column2', 'Column3', 'Column4'])

In [14]: df1 = df.set_index(['Column2', 'Column3', 'Column4'])

In [15]: df1.index.map(lambda ind: g.indices[ind][0])
Out[15]: array([0, 1, 0])

In [16]: df['dup_index'] = df1.index.map(lambda ind: g.indices[ind][0])

In [17]: df
Out[17]: 
   Column1 Column2 Column3  Column4 is_duplicated  dup_index
0        1     ABC     DEF       10         False          0
1        2     XYZ     DEF       40         False          1
2        3     ABC     DEF       10          True          0
于 2013-02-19T10:36:27.883 に答える
4

データフレームが に保存されているとしましょうdf

groupbyを使用して、データフレームの重複していない行を取得できます。ここでは、データの一部ではない Column1 を無視する必要があります。

df_nodup = df.groupby(by=['Column2', 'Column3', 'Column4']).first()

次に、マージ機能を使用して、この新しいデータフレームを元のデータフレームとマージできます。

df = df.merge(df_nodup, left_on=['Column2', 'Column3', 'Column4'], right_index=True, suffixes=('', '_dupindex'))

最終的に、データフレームにマージされた _dupindex 列を使用して、必要な列を追加する簡単な計算を行うことができます。

df['Is_Duplicate'] = df['Column1']!=df['Column1_dupindex']
df['Dup_Index'] = None
df['Dup_Index'] = df['Dup_Index'].where(df['Column1_dupindex']==df['Column1'], df['Column1_dupindex'])
del df['Column1_dupindex']
于 2013-02-19T10:29:49.963 に答える