Pandas按ID分组生成新列:仅替换每组内dummy列第二个1为0
实现代码
你可以通过分组累计求和定位到每个ID组内的第二个1,再做对应替换,代码如下:
import pandas as pd # 原始数据构造 df = pd.DataFrame({ "ID": [1, 1, 1,1,2,2, 2, 2,3,3,3,3], "year": [2004, 2005, 2006, 2007, 2004, 2005, 2006, 2007,2004, 2005, 2006, 2007], "dummy": [0,1,1,0,1,1,0,0,0,0,0,0] }) # 生成目标列dummy1 df['dummy1'] = df['dummy'].where(df.groupby('ID')['dummy'].cumsum() != 2, 0)
逻辑说明
df.groupby('ID')['dummy'].cumsum()会在每个ID分组内对dummy列做累计求和,每遇到1就计数+1,遇到0保持计数不变,因此累计和等于2的位置,就是该组内第二个dummy=1的行where()方法会保留符合条件的原始值,不符合条件的位置替换为指定的0,刚好实现仅替换每组第二个1为0,其他值保持不变的需求
内容的提问来源于stack exchange,提问作者Jui Sen
相关产品推荐
相关产品推荐

