Pandas中的Cumsum(有点)从负数或零开始

时间:2016-11-08 22:00:35

标签: python pandas

我有一个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

我想不出一个好方法。

2 个答案:

答案 0 :(得分:1)

我看到这是一个老问题,但是要用几行代码并更有效地进行操作,您可以使用groupbycumcount并用{{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':

如果有更快捷的方式,那么我想听听它。