名前が後続の行に表示される場合は、その行を削除します。主に私は重複を発見したインデックスを取得し、そのインデックス番号を使用してdfからドロップする方法がわかりません。複数の列とドロップ行で重複を見つける - Pandas
import pandas as pd
data = {'interviewer': ['Jason', 'Molly', 'Jermaine', 'Jake', 'Amy'],
'candidate': ['Bob', 'Jermaine', 'Ahmed', 'Karl', 'Molly'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data)
#names = pd.unique(df[['interviewer', 'candidate']].values.ravel()).tolist()
mt = []
for i, c in zip(df.interviewer, df.candidate):
print i, c
if i not in mt:
if c not in mt:
mt.append(df.loc[(df.interviewer == i) & (df.candidate == c)])
else:
continue
私の考えはdf.drop
に渡すと、これらのインデックスを持つ行を削除するには、リストとして使用mt
ました。私が望む結果は、MollyまたはJermaineがインデックス2または4に再び現れるのを見ることなく、df.drop([2,4], inplace=True)
です。
EDITED
私がドロップする渡したいインデックスのリストを作成する方法を考え出した:
import pandas as pd
data = {'interviewer': ['Jason', 'Molly', 'Jermaine', 'Jake', 'Amy'],
'candidate': ['Bob', 'Jermaine', 'Ahmed', 'Karl', 'Molly'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data)
#print df
counter = -1
bad_rows = []
names = []
for i, c in zip(df.interviewer, df.candidate):
print i, c
counter += 1
print counter
if i not in names:
names.append(i)
else:
bad_rows.append(counter)
if c not in names:
names.append(c)
else:
bad_rows.append(counter)
#print df.drop(bad_rows)
しかしこれを行うには、よりスマートな方法がなければなりません、おそらく@Ami_Tavory itertoolsの答えに沿った何か?
あなたはこれを見を持っている場合があります:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html – albert
私は( 'df.drop_duplicatesを試してみました[ 'candidate'、 'interviewer')) 'しかし、それは両方が一致したときにのみ動作します。私は '見た名前が見つかった - 行を落とす'機能を探しています – noblerthanoedipus