如何解决每个用户 'velocity_dif' 大于 0 的次数
我有一个包含veLocity_dif 列的数据框,我需要知道每个用户分组veLocity_dif 大于0 的次数。 这是我到现在为止的代码:
df_trials_clean['total_path'] = np.sqrt((df_paths_clean['x'])**2+
(df_paths_clean['y'])**2).groupby(["user",'trial']).max()
df_trials_clean['veLocity'] = df_trials_clean['total_path'] / df_trials_clean['total_time']
df_trials_clean['veLocity_dif'] = df_trials_clean['veLocity'].diff()
我试过了:
df_1k_c = df_trials_clean['veLocity_dif'] > 0
df_1k = df_trials_clean[df_1k_c]
df_1k['user'] = df_users['user']
df_1k.set_index('user')
这给了我正值,但不是每个用户多少次。 有人可以帮我吗?
解决方法
一如既往,有多种方法可以做到这一点。这肯定不是最简洁的,但希望容易理解。
假设您有一个数据框 df
,其中(除其他外)一列速度如下:
user velocity
0 A 10
1 A 11
2 B 9
3 A 12
4 B 4
5 A 13
6 A 9
7 C 1
8 B 6
9 B 8
取一组所有用户:
users = set(df['user'])
users
>> {'C','B','A'}
并定义一个函数来计算每个用户的改进次数:
def impr(df,user):
# take only entries of this particular user:
aux = df[df['user'] == user].copy()
aux['velocity_dif'] = aux['velocity'].diff()
return sum(aux['velocity_dif'] > 0) # counts True as 1,False as 0
现在您可以制作一个数据框,显示每个用户的改进,如下所示:
improvements = pd.DataFrame([[user,impr(df,user)] for user in users],columns = ['user','nr improvements'])
improvements
对于如上所示的输入,这将给出
user nr improvements
0 C 0
1 B 2
2 A 3
作为一个单行(更简洁但绝对不容易阅读=不优选),这给出了相同的结果:
improvements = pd.DataFrame([[user,sum(df[df['user'] == user]['velocity'].diff() > 0)] for user in users],'nr improvements'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。