我有一个如下所示的数据框:
date|point|agent
2023-10-02|A|agent1
2023-10-02|A|agent2
2023-10-05|B|agent3
2023-10-05|B|agent2
2023-10-02|C|agent1
2023-10-02|C|agent2
2023-10-02|C|agent3
每天的特定时间点,应该只有两名客服人员。有些情况下有两个以上的代理,我想返回那些我想返回有两个以上代理的行。
我用groupby先算了一下:
df.groupby(['point','date'])['agent'].nunique()>2
我可以用
df['agent_count'] = df.groupby(['point','date'])['agent'].transform('nunique')
然后获取超过2的行。但是有没有其他方法,没有多余的数据呢? 我使用了
loc
和 iloc
,where
和 exh 给了我很多错误。我正在寻找一种有效的方法来返回行而不将计数添加到数据帧。我确实在这里探索了两个小时的问题,但没有一个起作用。
import pandas as pd
# Sample DataFrame
data = {
'date': ['2023-10-02', '2023-10-02', '2023-10-05', '2023-10-05', '2023-10-02', '2023-10-02', '2023-10-02'],
'point': ['A', 'A', 'B', 'B', 'C', 'C', 'C'],
'agent': ['agent1', 'agent2', 'agent3', 'agent2', 'agent1', 'agent2', 'agent3']
}
df = pd.DataFrame(data)
# Group by point and date, and filter rows with more than two unique agents
result = df.groupby(['point', 'date']).filter(lambda x: x['agent'].nunique() > 2)
print(result)
date point agent
4 2023-10-02 C agent1
5 2023-10-02 C agent2
6 2023-10-02 C agent3