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

如何对分组后的Pandas DataFrame执行指定自定义操作?

解决Pandas分组后的两个操作需求

嘿,我来帮你一步步搞定这两个Pandas操作,先从构造示例数据开始:

import pandas as pd

# 构造初始DataFrame
df = pd.DataFrame({
    'User': ['A', 'A', 'A', 'B', 'B', 'C', 'C'],
    'Numbers': [0, 4, 5, 0, 0, 1, 3]
})

1. 移除所有Numbers列全为0的用户组

要实现这个需求,我们可以用groupby().filter()方法,精准过滤掉那些Numbers列全为0的分组:

# 过滤掉全为0的用户组
filtered_df = df.groupby('User').filter(lambda group: (group['Numbers'] != 0).any())
print(filtered_df)

执行后输出结果:

User  Numbers
0    A        0
1    A        4
2    A        5
5    C        1
6    C        3

简单解释:lambda group: (group['Numbers'] != 0).any()的逻辑是,只要当前分组里存在至少一个非0值,就保留这个分组;反之(全为0)就被剔除,所以用户B的组就被移除了。

2. 计算每个用户组Numbers列的方差

计算分组方差直接用groupby().var()方法就行,Pandas默认计算的是样本方差(除以n-1),刚好和你给出的示例结果匹配:

# 计算每组的方差并重置索引
variance_df = df.groupby('User')['Numbers'].var().reset_index(name='Variance')
print(variance_df)

执行后输出结果:

User  Variance
0    A       7.0
1    B       0.0
2    C       2.0

顺手验证下结果:

  • 用户A的Numbers:0、4、5,均值是3,样本方差为((0-3)² + (4-3)² + (5-3)²)/(3-1) = (9+1+4)/2 = 7
  • 用户B的Numbers全为0,方差自然是0
  • 用户C的Numbers:1、3,均值是2,样本方差为((1-2)² + (3-2)²)/(2-1) = (1+1)/1 = 2
    完全符合你的预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:04:59