Pandas DataFrame按ID分组取Value最小值并保留Check列Y值的方案
问题解决方法
你现有代码无法得到预期结果的核心原因是:空字符串''的字典序小于'Y',使用全局min聚合时,Check列会优先返回空值,和你「只要分组内有Y就保留Y」的需求完全相反。
你可以为不同列指定不同的聚合规则实现需求:Check类列使用max聚合('Y'的字典序大于空值,分组内只要存在一个Y,聚合结果就会返回Y),Value列使用min聚合取对应ID的最小值,实现代码如下:
import pandas as pd # 先将缺失值填充为空字符串 df = df.fillna('') # 按ID分组,不同列应用不同聚合规则 df_agg = df.groupby('ID', as_index=False).agg({ 'Check 1': 'max', 'Check 2': 'max', 'Value': 'min' })
运行上述代码得到的df_agg就是你需要的预期输出结果。
内容的提问来源于stack exchange,提问作者Koelker12
相关产品推荐
相关产品推荐

