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

如何将同一my_key的多行数据转换为含varying_column计数的单行

问题与解决方案

问题描述

现有如下结构的DataFrame:

import pandas as pd

df = pd.DataFrame(
    {'col1':['foo','foo','foo','foo','foo','foo'],
     'col2':['bar','bar','bar','bar','bar','bar'],
     'col3':['baz','baz','baz','baz','baz','baz'],
     'varying_column':['x','y','z','d','e','f']},
    index=['a','b','c','a','a','b']
).reset_index().rename(columns={'index':'my_key'})

原始数据展示:

my_keycol1col2col3varying_column
afoobarbazx
bfoobarbazy
cfoobarbazz
afoobarbazd
afoobarbaze
bfoobarbazf

需求:按my_key将数据合并为一行,新增count_varying_column列统计该my_key对应去重后varying_column的数量。真实数据中col1、col2、col3可能存在不同值,需合理处理这些列的聚合。

解决方案

核心逻辑

通过groupby按my_key分组,对varying_column用nunique()统计去重后的数量;对其他列根据业务需求选择合适的聚合方式(比如取首个值、众数等)。

代码实现

场景1:同组内其他列值一致(如示例数据)

直接分组聚合即可得到目标结果:

result = df.groupby('my_key').agg(
    col1=('col1', 'first'),
    col2=('col2', 'first'),
    col3=('col3', 'first'),
    count_varying_column=('varying_column', 'nunique')
).reset_index()

输出结果:

my_keycol1col2col3count_varying_column
afoobarbaz3
bfoobarbaz2
cfoobarbaz1

场景2:同组内其他列存在不同值

如果同组内col1等列有不同值,可根据需求调整聚合方式:

  • 取众数:适合多数值一致的场景
  • 拼接所有唯一值:保留所有不同信息
  • 取最大/最小值:数值型列适用

示例(以取众数为例):

result = df.groupby('my_key').agg(
    col1=('col1', lambda x: x.mode()[0]),
    col2=('col2', lambda x: x.mode()[0]),
    col3=('col3', lambda x: x.mode()[0]),
    count_varying_column=('varying_column', 'nunique')
).reset_index()

关键注意点

  • 必须用nunique()替代count():确保统计的是去重后的varying_column数量,满足需求。
  • 其他列的聚合方式要贴合业务:避免随意取数导致数据失真。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:19:52