如何基于另一列值对Pandas指定列分组并显示无分组行
解决DataFrame分组合并并保留空分组的问题
原始数据
| plates | food |
|---|---|
| 1 | eggs |
| 1 | bacon |
| 2 | waffles |
| 2 | toast |
| 3 | |
| 3 | |
| 4 | cereal |
| 4 | milk |
期望输出
| food |
|---|
| eggs bacon |
| waffles toast |
| None |
| cereal milk |
现有代码问题
你当前的代码存在语法错误(缺少闭合括号),正确写法应为:
result = df['food'].groupby(df['plates']).agg('sum')
但该写法会将空字符串分组的结果返回为空字符串,而非期望的None,无法满足全空分组的展示需求。
正确实现代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'plates': [1, 1, 2, 2, 3, 3, 4, 4], 'food': ['eggs', 'bacon', 'waffles', 'toast', '', '', 'cereal', 'milk'] }) # 分组合并并处理空分组 result = df.groupby('plates')['food'].agg( lambda x: ' '.join(item for item in x if item.strip()) or None ).reset_index(drop=True).to_frame('food') print(result)
代码说明
groupby('plates'):按盘子号分组,自动保留所有存在的分组(包括全空的分组3)- 自定义聚合函数:过滤掉分组内的空字符串,用空格拼接有效内容;若分组无有效内容,则返回
None reset_index(drop=True):移除原分组索引,转为连续索引to_frame('food'):将聚合后的Series转换为指定列名的DataFrame
内容的提问来源于stack exchange,提问作者Ichigo
相关产品推荐
相关产品推荐

