2017-09-17 46 views
0

我有一个包含两列的数据框:“代理”和“客户端” 每行对应于代理和客户端之间的交互。仅保留熊猫数据框中的重复行

如果客户端与至少两个代理进行交互,我只想保留行。

我该怎么做?

+0

应该通过熊猫使用组来做到这一点:https://pandas.pydata.org/pandas -docs/stable/generated/pandas.DataFrame.groupby.html –

回答

1

使用groupbytransform通过value_counts

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

注意,即,为mentioned here,你可能有一个代理与同一客户多次交互。这可能被保留为误报。如果你不希望这样,您可以过滤前添加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当然,听起来很合理。已添加。 –