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

Python Pandas按main key分组,按条件聚合两列数据的实现方法

解决方案

可以通过Pandas分组+自定义聚合函数实现需求,步骤如下:

1. 构造示例数据

先还原输入的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'main key': [123, 123, 123, 456, 789, 789, 147],
    'name': ['abc', 'def', 'ghi', 'abc', np.nan, np.nan, np.nan],
    'value': ['Value 1', 'Value 2', 'Value 3', 'Value 4', 'Value 5', 'Value 6', 'Value 7']
})

2. 定义自定义聚合函数

利用题目中「同一组内name要么全为NaN,要么全不为NaN」的特性,针对分组做差异化处理:

def aggregate_group(group):
    # 判断当前分组的name是否全为空值
    if group['name'].isna().all():
        # 给每个value添加单引号后用逗号拼接
        return ",".join(f"'{v}'" for v in group['value'])
    else:
        # 将name和value配对生成字典
        return dict(zip(group['name'], group['value']))

3. 分组聚合生成结果

按main key分组后应用自定义函数,最后调整列名:

result = df.groupby('main key', as_index=False).apply(aggregate_group).rename(columns={0: 'dataAggregated'})

最终输出

执行后result的内容与预期完全一致:

main keydataAggregated
123{'abc':'Value 1','def':'Value 2','ghi':'Value 3'}
456{'abc':'Value 4'}
789'Value 5','Value 6'
147'Value 7'

内容的提问来源于stack exchange,提问作者Kevin Bobby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:30:48