2017-09-17 13 views
0

私は2つの列を持つデータフレームを持っています: "エージェント"と "クライアント" 各行はエージェントとクライアント間の対話に対応しています。パンダのデータフレームに重複した行だけを保持

クライアントが少なくとも2つのエージェントと対話していた場合は、その行だけを残したいと思っています。

どうすればいいですか?

+0

これを行うには、パンダにして、グループを使用する必要があります。https://pandas.pydata.org/pandas -docs/stable/generated/pandas.DataFrame.groupby.html –

答えて

1

groupbyおよびtransformvalue_countsとする。

df[df.Agent.groupby(df.Agent).transform('value_counts') > 1] 

mentioned hereとして、あなたは同じクライアントで複数回の対話エージェントを1つ持っているかもしれない、という注意、。これは偽陽性として保持される可能性があります。あなたはこれをしたくない場合は、フィルタリングの前drop_duplicatesコールを追加することができます。

df = df.drop_duplicates() 
df = df[df.Agent.groupby(df.Agent).transform('value_counts') > 1] 

print(df) 
    A B 
0 1 2 
1 2 5 
2 3 1 
3 4 1 
4 5 5 
5 6 1 

mask = df.B.groupby(df.B).transform('value_counts') > 1 
print(mask) 
0 False 
1  True 
2  True 
3  True 
4  True 
5  True 
Name: B, dtype: bool 

df = df[mask] 
print(df) 
    A B 
1 2 5 
2 3 1 
3 4 1 
4 5 5 
5 6 1 
+0

OPには言及されていませんが、(おそらくは間違っていると思われる)単一のエージェントとのやりとりが繰り返されている場合に対応したいかもしれません。グループ化する前に '.drop_duplicates()'をスローしたいかもしれません... –

+0

@JonClements確かに、妥当なと思われます。に追加されました。 –

関連する問題