微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每个用户 'velocity_dif' 大于 0 的次数

如何解决每个用户 '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 举报,一经查实,本站将立刻删除。