【问题标题】:Assign values to a column based on Min and Max of a particular group根据特定组的最小值和最大值为列分配值
【发布时间】:2021-09-09 15:25:44
【问题描述】:
我有 3 个字段 Cust_ID、Acc_No 和 Product,如下表所示
我需要为每个 Cust_ID 添加一个基于“产品”值的“类型”列。如果客户的所有“产品”值介于“a”到“m”或“n”到“z”之间,则应将其标记为“单”,否则应标记为“多”,如下表所示
我正在尝试按“Cust_ID”分组并将“产品”的最小值和最大值与范围“=n”进行比较,但无法成功实施。任何帮助将不胜感激,在此先感谢。
【问题讨论】:
标签:
python
dataframe
pandas-groupby
apply
【解决方案1】:
你可以使用.groupby.transform + Series.between:
df["Type"] = df.groupby("Cust_ID")["Product"].transform(
lambda x: np.where(
x.between("a", "m").all() | x.between("n", "z").all(),
"Single",
"Multiple",
)
)
print(df)
打印:
Cust_ID Acc_No Product Type
0 1 111 a Single
1 1 112 b Single
2 1 113 c Single
3 2 221 a Multiple
4 2 222 x Multiple
5 2 223 y Multiple
6 3 331 z Single
7 3 332 x Single