我有一个包含两列的数据框:“代理”和“客户端” 每行对应于代理和客户端之间的交互。
如果客户端与至少2个代理进行交互,我想只保留行。
我该怎么做?
答案 0 :(得分:1)
groupby
使用transform
和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