You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 00:36:01