首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于唯一ID和绘图的Pandas Dataframe中两列对角差

基于唯一ID和绘图的Pandas Dataframe中两列对角差
EN

Stack Overflow用户
提问于 2018-08-23 12:53:47
回答 1查看 238关注 0票数 1

我有这样的数据:

代码语言:javascript
复制
    videoId viewedMinutes   totalMinutes    user_drop   TotalUsers
    1017479     0                5             8         34
    1017479     1                5             3         34
    1017479     2                5             2         34
    1017479     4                5             3         34
    1017479     5                5             19        34
    1036704     0                16            1         14
    1036704     1                16            2         14
    1036704     2                16            2         14
    1036704     3                16            1         14
    1036704     5                16            1         14
    1036704     6                16            1         14
    1036704     8                16            2         14

因此,我想创建一个新的列active_users minute,如下所示:

代码语言:javascript
复制
    videoId viewedMinutes  totalMinutes   user_drop TotalUsers active_users
    1017479     0                5             8         34       34 (1st is fixed)
    1017479     1                5             3         34       26(34(active_users)-8(user_drop))
    1017479     2                5             2         34       23(26-3)
    1017479     4                5             3         34       21(23-2)
    1017479     5                5             18        34       18(21-3)
    1036704     0                16            1         14       14
    1036704     1                16            2         14       12
    1036704     2                16            2         14       10
    1036704     3                16            1         14       9
    1036704     5                16            1         14       8
    1036704     6                16            1         14       7
    1036704     8                16            6         14       6

因此,它与对角相减一样,但第一和最后的值将保持不变。另外,我希望这个算法能为每个唯一的videoId运行,而不是在我的数据文件中运行。

现在使用for循环,我想为每一个唯一的videoId绘制一个散点图,在X轴上有分钟,没有。Y轴中的活动用户。该图形将如下所示:retention.jpg

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 12:57:57

使用带有自定义函数的groupbycumsumshift -对于第一行创建的NaN值,参数fill_value=0sub函数忽略该值。

代码语言:javascript
复制
s = df.groupby('videoId')['user_drop'].apply(lambda x: x.cumsum().shift())
df['active'] = df['TotalUsers'].sub(s, fill_value=0).astype(int)
print (df)
    videoId  viewedMinutes  totalMinutes  user_drop  TotalUsers  active
0   1017479              0             5          8          34      34
1   1017479              1             5          3          34      26
2   1017479              2             5          2          34      23
3   1017479              4             5          3          34      21
4   1017479              5             5         19          34      18
5   1036704              0            16          1          14      14
6   1036704              1            16          2          14      13
7   1036704              2            16          2          14      11
8   1036704              3            16          1          14       9
9   1036704              5            16          1          14       8
10  1036704              6            16          1          14       7
11  1036704              8            16          2          14       6

编辑:

散点图使用:

代码语言:javascript
复制
for i, df in df.groupby('videoId'):
    ax = df.plot.scatter(x='viewedMinutes', y='active')
    ax.set_title(i, fontsize=20)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51986331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档