根据 groupby python 产生的条件返回数据帧的子集

问题描述 投票:0回答:1

我有一个如下所示的数据框:

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 给了我很多错误。我正在寻找一种有效的方法来返回行而不将计数添加到数据帧。我确实在这里探索了两个小时的问题,但没有一个起作用。

python pandas dataframe group-by
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.