Pandas如何合并相同store_id、city_id的多行列值为单行?
Pandas分组拼接字段实现方案
实现思路
- 先对
sales_A、sales_B、sales_C三个字段做预处理,过滤掉None和无效空值 - 按
store_id、city_id两个维度做分组聚合 - 对每个分组的三个sales字段分别执行非空值拼接操作,保留原有字符串格式
代码实现
首先导入依赖并构造示例测试数据:
import pandas as pd # 示例数据构造,可替换为你自己的df df = pd.DataFrame({ 'store_id': [1, 1, 2, 2, 2], 'city_id': [101, 101, 102, 102, 102], 'sales_A': ["100", None, "200", "210", None], 'sales_B': [None, "150", None, None, "300"], 'sales_C': ["a_50", "b_60", None, "c_80", None] })
核心聚合逻辑:
# 自定义拼接函数:仅拼接非空有效值,保留原有字符串格式 def concat_valid_values(series): # 过滤None值,若需要保留全空格的有效值可删除and后的判断逻辑 valid_list = [val for val in series if val is not None and val.strip() != ''] # 全空分组默认返回None,若需要返回空字符串可删除if后的判断 return ', '.join(valid_list) if valid_list else None # 分组聚合得到结果 result_df = df.groupby(['store_id', 'city_id'], as_index=False).agg( sales_A = ('sales_A', concat_valid_values), sales_B = ('sales_B', concat_valid_values), sales_C = ('sales_C', concat_valid_values) )
效果说明
- 最终输出的
result_df中每一行唯一对应一个store_id+city_id组合 - 所有非空字符串原值完全保留,不会做任何格式转换
- 可根据实际需求调整空值返回规则,按需修改自定义拼接函数即可
内容的提问来源于stack exchange,提问作者Timothy
相关产品推荐
相关产品推荐

