我正在尝试建立一个计数器来跟踪有关几个不同用户的失败和成功的次数。我有一个带有重复的用户代码的数据框(如果有更多关于同一用户的事件)和时间戳以跟踪时间变量。我想添加两列(成功次数,失败次数)来累积前面事件的结果。
示例数据:
data=pd.DataFrame(
{
'user_id': [2,2,3,2,4,5,3,3,6,6,6,7],
'timestamp': [1567641600,1567691600,1567741600,1567941600, 1567981600, 1567991600,1568391600,1568541600,1568741600,1568941600,1568981600,1568988600],
'status': ['yes','no','yes','no', 'yes', 'yes','yes','no','no','yes','no','yes']
}
)
我尝试过在R中进行一些循环,但是我担心会丢失某些内容,也许有更好的方法可以在Python中执行此操作?
期望的结果将是这样:
data=pd.DataFrame(
{
'user_id': [2,2,3,2,4,5,3,3,6,6,6,7],
'timestamp': [1567641600,1567691600,1567741600,1567941600, 1567981600, 1567991600,1568391600,1568541600,1568741600,1568941600,1568981600,1568988600],
'status': ['yes','no','yes','no', 'yes', 'yes','yes','no','no','yes','no','yes'],
'number_yes':[1,1,1,1,1,1,2,2,0,1,1,1],
'number_no':[0,1,0,2,0,0,0,1,1,1,2,0]
}
)
用途:
m = data['status'].eq('yes')
data = data.assign(
number_yes=m.groupby(data['user_id']).cumsum(),
number_no=(~m).groupby(data['user_id']).cumsum()
)
# print(data)
user_id timestamp status number_yes number_no
0 2 1567641600 yes 1.0 0.0
1 2 1567691600 no 1.0 1.0
2 3 1567741600 yes 1.0 0.0
3 2 1567941600 no 1.0 2.0
4 4 1567981600 yes 1.0 0.0
5 5 1567991600 yes 1.0 0.0
6 3 1568391600 yes 2.0 0.0
7 3 1568541600 no 2.0 1.0
8 6 1568741600 no 0.0 1.0
9 6 1568941600 yes 1.0 1.0
10 6 1568981600 no 1.0 2.0
11 7 1568988600 yes 1.0 0.0