如何过滤Pandas DataFrame:保留非重复项及重复项中B值最大行
Pandas DataFrame 过滤需求:保留非重复行及重复组中B值最大的行
我是Pandas DataFrame的新手,如果有现成的简单实现方式我没考虑到,先在此致歉。
假设有一个DataFrame df,包含3列:
A:字符串类型,值不唯一,相同A对应的B值可能不同B:浮点类型C:布尔类型,C=True表示对应A值在数据集中重复(实际可通过df['C']=df['A'].duplicated(keep=False)生成,属于冗余列)
示例DataFrame如下:
| | A | B | C | |---|-----|-----|-------| | 0 | cat | 10 | True | | 1 | dog | 10 | False | | 2 | cat | 20 | True | | 3 | bee | 100 | False |
我想要处理后的DataFrame满足:
- 对于
A值重复的行(即C==True),只保留B值最大的那一行 - 同时保留所有
A值不重复的行(C==False)
我已经能获取重复组中B值最大的行:
df.loc[df[df['C']].groupby('A')['B'].idxmax()] # 这是否是最优方法?
但我需要的是完整的过滤结果,也就是把非重复行和上述最大B值行合并到一起。我想到的方法是将df[~df['C']]和上面的结果拼接,想问这是不是最优的实现方式?
内容的提问来源于stack exchange,提问作者Limone
相关产品推荐
相关产品推荐

