使用数据框:
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]})
ID year dummy
1 2004 0
1 2005 1
1 2006 1
1 2007 0
2 2004 1
2 2005 1
2 2006 0
2 2007 0
3 2004 0
3 2005 0
3 2006 0
3 2007 0
我想生成一个新列:'dummy1' from 'dummy' column
ID year dummy dummy1
1 2004 0 0
1 2005 1 1
1 2006 1 0
1 2007 0 0
2 2004 1 1
2 2005 1 0
2 2006 0 0
2 2007 0 0
3 2004 0 0
3 2005 0 0
3 2006 0 0
3 2007 0 0
如果我使用:
df['dummy1'] = df["dummy"].replace({"1": "0"}, inplace=False)
它将所有的 1 替换为 0。如何修改代码以仅将每个 ID 的第二个 1 替换为 0?
df['dum'] = df.groupby('ID')['dummy'].cummax()
然后,
conditions = [
(df['dum']== 0),
(df['dum']== 1)
]
values = [0, (df.index == df.groupby('ID').dummy.transform('idxmax')).astype(int)]
df['dummy1'] = np.select(conditions, values)
ID year dummy dummy1
1 2004 0 0
1 2005 1 1
1 2006 1 0
1 2007 0 0
2 2004 1 1
2 2005 1 0
2 2006 0 0
2 2007 0 0
3 2004 0 0
3 2005 0 0
3 2006 0 0
3 2007 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句