pandas 基于groupby python产生的条件返回一个子框架

ar5n3qh5  于 11个月前  发布在  Python
关注(0)|答案(2)|浏览(102)

我有一个像下面这样的 Dataframe :

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的行。但是有没有其他方法,而没有冗余数据?我使用locilocwhere和exh给了我很多错误。我正在寻找一种有效的方法来返回行,而不需要将计数添加到嵌套框中。我在这里探索了两个小时的问题,但没有一个是有效的。

ccrfmcuu

ccrfmcuu1#

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)

个字符

piztneat

piztneat2#

你的思路是对的。下面是你如何在一条线上做到这一点。

df[df.groupby(['point','date'])['agent'].transform('nunique')>2]

         date point   agent
4  2023-10-02     C  agent1
5  2023-10-02     C  agent2
6  2023-10-02     C  agent3

字符串

相关问题