私は一見簡単な問題で立ち往生しています:パンダのデータフレームに一意の行をドロップします。基本的に、の反対ですdrop_duplicates()
。
これが私のデータだとしましょう:
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
AとBが一意である場合、つまり行1と2のみを保持したい場合は、行を削除します。
私は以下を試しました:
# Load Dataframe
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
uniques = df[['A', 'B']].drop_duplicates()
duplicates = df[~df.index.isin(uniques.index)]
しかし、0、1、および3が一意であるため、行2のみを取得します。
重複するすべての行を選択するためのソリューション:
duplicated
サブセットとパラメーターkeep=False
を使用して、すべての重複を選択できます。
df = df[df.duplicated(subset=['A','B'], keep=False)]
print (df)
A B C
1 foo 1 A
2 foo 1 B
解決策transform
:
df = df[df.groupby(['A', 'B'])['A'].transform('size') > 1]
print (df)
A B C
1 foo 1 A
2 foo 1 B
すべての一意の行を選択するための少し変更されたソリューション:
#invert boolean mask by ~
df = df[~df.duplicated(subset=['A','B'], keep=False)]
print (df)
A B C
0 foo 0 A
3 bar 1 A
df = df[df.groupby(['A', 'B'])['A'].transform('size') == 1]
print (df)
A B C
0 foo 0 A
3 bar 1 A
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加