如何在Pandas中按指定key分组后取其他列最小/最大值并合并为单行
解决方法
直接使用groupby.agg()为不同列指定独立的聚合规则即可实现需求,你的场景中C列同分组下数值完全一致,随便取首个值即可:
import pandas as pd # 原数据构造 df = pd.DataFrame({'A': [1,2,1,2,3,3,3,4,5,6,6,4,5,5], 'B': [1.1,2.1,1.2,2.2,3.1,3.2,3.3,4.1,5.1,6.1,6.2,4.2,5.2,5.3], 'C':[10.1,20.1,10.1,20.1,30.1,30.1,30.1,40.1,50.1,60.1,60.1,40.1,50.1,50.1], 'D':['','',10.2,20.2,'','',30.2,'','','',60.2,40.2,'',50.2] }) # 处理D列空字符串,转成数值类型,空值自动转为NaN,max计算时会自动忽略无效空值 df['D'] = pd.to_numeric(df['D'], errors='coerce') # 按A分组,分别指定各列的聚合规则 result = df.groupby('A', as_index=False).agg({ 'B': 'min', 'C': 'first', 'D': 'max' }) print(result)
运行后输出结果完全匹配你的预期:
A B C D 0 1 1.1 10.1 10.2 1 2 2.1 20.1 20.2 2 3 3.1 30.1 30.2 3 4 4.1 40.1 40.2 4 5 5.1 50.1 50.2 5 6 6.1 60.1 60.2
如果实际场景中同分组的C值不固定,你可以根据自己的需求替换C对应的聚合规则即可。
内容的提问来源于stack exchange,提问作者jonny_two_knives
相关产品推荐
相关产品推荐

