我正在尝试从以下创建一个新变量df
。我想创建一个新的二进制(0 或 1)变量,如果在他们的任何一个季度中变量entr
等于 1,并且按 id放置,则该变量在一年中的每个季度都设置为 1 。
此数据框的示例转换为:
id year quarter fecha entr
1 2007 1 220 0
1 2007 2 221 0
1 2007 3 222 0
1 2007 4 223 0
1 2008 1 224 0
1 2008 2 225 0
1 2008 3 226 1
1 2008 4 227 0
1 2009 1 228 0
1 2009 2 229 0
1 2009 3 230 0
1 2009 4 231 0
2 2007 1 220 0
2 2007 2 221 0
2 2007 3 222 0
2 2007 4 223 0
2 2008 1 224 0
2 2008 2 225 0
2 2008 3 226 0
2 2008 4 227 0
2 2009 1 228 0
2 2009 2 229 1
2 2009 3 230 0
2 2009 4 231 0
结果应该是这样的:
id year quarter fecha entr new variable
1 2007 1 220 0 0
1 2007 2 221 0 0
1 2007 3 222 0 0
1 2007 4 223 0 0
1 2008 1 224 0 1
1 2008 2 225 0 1
1 2008 3 226 1 1
1 2008 4 227 0 1
1 2009 1 228 0 0
1 2009 2 229 0 0
1 2009 3 230 0 0
1 2009 4 231 0 0
2 2007 1 220 0 0
2 2007 2 221 0 0
2 2007 3 222 0 0
2 2007 4 223 0 0
2 2008 1 224 0 0
2 2008 2 225 0 0
2 2008 3 226 0 0
2 2008 4 227 0 0
2 2009 1 228 0 1
2 2009 2 229 1 1
2 2009 3 230 0 1
2 2009 4 231 0 1
非常感谢你,对不起我的英语。
呼叫groupby
上id
,year
和transform('max')
上entr
:
v = df.groupby(['id', 'year']).entr.transform('max')
v
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 0
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
20 1
21 1
22 1
23 1
Name: entr, dtype: int64
df['new variable'] = v
如果最大值可能大于 1,您可以groupby
调用clip
结果:
df.groupby(['id', 'year']).entr.transform('max').clip(0, 1)
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 0
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
20 1
21 1
22 1
23 1
Name: entr, dtype: int64
这也适用于 Vaishali 的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句