我有一个输入数据集如下:
df['A_new']=df['A']
df.loc[~((df.date >='2015-07-15') & (df.date <='2015-07-22')),'A_new']=0
这里A是事件A的虚拟/指示变量。我想进一步对虚拟变量进行子集化,如果日期在2015-07-15和2015-07-范围内,你的A_new(新指标变量)为1 22,否则它仍为0。
App\Http\Controllers
我的代码如下:
SQLite3
但我仍然没有得到理想的结果。只是想知道我的逻辑是否正确。
答案 0 :(得分:2)
更简单的解决方案是将布尔掩码转换为int
- 所以True
为1
而False
为0
:
df['A_new'] = ((df.date >='2015-07-15') & (df.date <='2015-07-22')).astype(int)
print (df)
date event A A_new
0 2015-07-15 A 1 1
1 2015-07-16 A 1 1
2 2015-07-22 A 1 1
3 2015-07-23 A 1 0
4 2015-07-26 A 1 0
between
的另一个解决方案:
df['A_new'] = df.date.between('2015-07-15','2015-07-22').astype(int)
print (df)
date event A A_new
0 2015-07-15 A 1 1
1 2015-07-16 A 1 1
2 2015-07-22 A 1 1
3 2015-07-23 A 1 0
4 2015-07-26 A 1 0
正如piRSquared所指出的那样,A
列需要按A
列多个值(谢谢):
print (df)
date event A
0 2015-07-15 A 1
1 2015-07-16 A 6
2 2015-07-22 A 2
3 2015-07-23 A 1
4 2015-07-26 A 1
df['A_new'] = df.date.between('2015-07-15','2015-07-22').astype(int).mul(df.A)
print (df)
date event A A_new
0 2015-07-15 A 1 1
1 2015-07-16 A 6 6
2 2015-07-22 A 2 2
3 2015-07-23 A 1 0
4 2015-07-26 A 1 0
where
的解决方案:
df['A_new'] = df.A.where(df.date.between('2015-07-15','2015-07-22'), 0)
print (df)
date event A A_new
0 2015-07-15 A 1 1
1 2015-07-16 A 6 6
2 2015-07-22 A 2 2
3 2015-07-23 A 1 0
4 2015-07-26 A 1 0