按id分组,当count列无0值时生成dummy哑变量
按ID分组生成dummy列:仅当组内count全不为0时设为1
给定如下DataFrame,需按id分组实现:仅当某一id对应的count列所有值均不为0时,为该组所有行设置dummy=1,否则dummy=0。
原始数据
id count A 9 A 0 A 2 A 1 B 2 B 5 B 2 B 1 C 1 C 9 D 7 D 2 D 0
期望输出
id count dummy A 9 0 A 0 0 A 2 0 A 1 0 B 2 1 B 5 1 B 2 1 B 1 1 C 1 1 C 9 1 D 7 0 D 2 0 D 0 0
解决方案
使用Pandas的groupby结合transform方法,将组级别的判断结果广播到每一行:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'id': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'D', 'D', 'D'], 'count': [9, 0, 2, 1, 2, 5, 2, 1, 1, 9, 7, 2, 0] }) # 生成dummy列:组内count全不为0则为1,否则为0 df['dummy'] = df.groupby('id')['count'].transform(lambda x: int((x != 0).all())) # 输出结果 print(df)
逻辑说明
groupby('id')['count']:按id分组,针对每组的count列进行处理(x != 0).all():判断组内所有count值是否都不为0,返回布尔值(True/False)int(...):将布尔值转换为整数(True→1,False→0)transform:将组级别的计算结果广播到该组的每一行,保证每个id对应的所有行拥有相同的dummy值
内容的提问来源于stack exchange,提问作者Olive
相关产品推荐
相关产品推荐

