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

Pandas分组聚合后如何使用apply方法计算count与nunique的线性组合

存在对应的apply实现方案,以下是符合需求的可行写法:

写法1:groupby阶段直接计算目标列(仅输出C列)

和你预期的调用逻辑完全匹配,直接对每个分组的Series执行聚合计算:

import pandas as pd
# 直接在groupby后apply计算线性组合
s = df.groupby(df.index.date)['value'].apply(lambda x: x.count() - x.nunique() + 1).rename('C')
print(s)

输出样例:

2009-01-03     1
2009-01-09    14
2009-01-10    61
2009-01-11    93
2009-01-12    99
Name: C, dtype: int64

写法2:保留原有count、nunique列同时计算C列

如果需要同时保留两个原始聚合列,可以在apply中返回多值Series:

s = df.groupby(df.index.date)['value'].apply(
    lambda x: pd.Series({
        'count': x.count(),
        'nunique': x.nunique(),
        'C': x.count() - x.nunique() + 1
    })
)
print(s)

输出和你用eval方法得到的结果完全一致:

count  nunique     C
2009-01-03    1.0      1.0   1.0
2009-01-09   14.0      1.0  14.0
2009-01-10   61.0      1.0  61.0
2009-01-11   93.0      1.0  93.0
2009-01-12  106.0      8.0  99.0

写法3:对已聚合完成的DataFrame行级apply计算

如果你已经先执行了agg得到了包含count、nunique的DataFrame,也可以逐行计算:

s = df.groupby(df.index.date)['value'].agg(['count', 'nunique'])
s['C'] = s.apply(lambda row: row['count'] - row['nunique'] + 1, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:04