我有一个pandas数据框我的一个vars看起来像这样:
user, time, used
1, 2015-01-01, 0
1, 2015-02-01, 0
1, 2015-03-01, 0
1, 2015-04-01, 1
1, 2015-05-01, 0
2, 2015-01-01, 0
2, 2015-02-01, 1
2, 2015-03-01, 0
“used”变量基本上是一个指示器,显示用户第一次出现。我想要做的是创建一个新变量,指示我们第一次使用之前和之后的几个月:
user, time, used, new
1, 2015-01-01, 0, -3
1, 2015-02-01, 0, -2
1, 2015-03-01, 0, -1
1, 2015-04-01, 1, 0
1, 2015-05-01, 0, 1
2, 2015-01-01, 0, -1
2, 2015-02-01, 1, 0
2, 2015-03-01, 0, 1
我想不出一个好方法。
答案 0 :(得分:1)
我看到这是一个老问题,但是要用几行代码并更有效地进行操作,您可以使用groupby
,cumcount
并用{{1删除'used'为1的行的位置}}和transform
,例如:
argmax
然后used_g = df.groupby('user')['used']
df['new'] = used_g.cumcount() - used_g.transform(lambda x: (x.values).argmax())
看起来像预期的
df
答案 1 :(得分:0)
不确定是否有更好的方法。这种方式真的慢,但这是我在它工作时登陆的方式。
if stu == 'No' or 'no':
如果有更快捷的方式,那么我想听听它。