python - 带有过滤器的 Pandas 小计到整个组
问题描述
给定以下数据框:
import pandas as pd
import numpy as np
np.random.seed(seed=1)
size=20
df = pd.DataFrame({"group":np.random.choice(["A","B","C"], size),
"exclude":np.random.choice(["Yes","No"], size),
"value":np.random.randint(0,5,size=20)}).sort_values(["group","value","exclude"])
对于每个组,我需要一列,其中包含不包括特定行的组小计。我正在使用以下命令执行此操作:
df["group_sum"] = df[(df.exclude=="No")].groupby("group")["value"].transform("sum")
不幸的是,对于排除的记录,该列是空的。为了填充它,我正在执行以下操作:
df["group_sum"] = df.groupby("group")["group_sum"].transform("max")
有没有办法将这两个语句合并为一个?
解决方案
您可以使用where
保留未选择的行但将它们设置为 NaN 值:
df["group_sum"] = df.where(df.exclude== 'No').groupby("group")["value"].transform(
"sum").groupby(df.group).transform("max")
它给:
group exclude value group_sum
2 A No 0 12.0
6 A No 0 12.0
10 A No 0 12.0
5 A Yes 0 12.0
1 A Yes 1 12.0
8 A No 2 12.0
14 A No 3 12.0
18 A No 3 12.0
19 A No 4 12.0
16 B No 0 4.0
9 B No 1 4.0
0 B Yes 1 4.0
4 B Yes 1 4.0
12 B Yes 1 4.0
7 B No 3 4.0
3 B Yes 4 4.0
17 C No 1 5.0
13 C Yes 1 5.0
11 C Yes 3 5.0
15 C No 4 5.0
推荐阅读
- karate - 空手道 testParallel 跑步者的可能问题
- angular - 错误 TS2345:类型参数 '{ Item: object[]; }' 不可分配给 '{ x: any; 类型的参数;y:任何;z:任何;一:任何;}'
- php - 搜索具有两个值的数组
- java - 如何识别 PDF 文件是否包含表单域
- python - 从 num_dict 返回值大于或等于 min_cutoff 的所有键(按设置)
- fortran - 当派生类型位于单独的模块中时,如何让 Doxygen 正确显示类层次结构
- java - 使 MySQL 与非本地连接(移动数据等)一起工作
- java - 使用 Embedded Postgres 进行集成测试
- java - 变量互斥不起作用
- javascript - ytdl:“url”参数必须是字符串类型。接收类型未定义