Python 3.x 基于唯一id和plot图的Pandas数据帧中两列对角线差

Python 3.x 基于唯一id和plot图的Pandas数据帧中两列对角线差,python-3.x,pandas,plotly,Python 3.x,Pandas,Plotly,我有这样一个数据帧: videoId viewedMinutes totalMinutes user_drop TotalUsers 1017479 0 5 8 34 1017479 1 5 3 34 1017479 2 5 2

我有这样一个数据帧:

    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
    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
因此,我想创建一个新的列
active\u users
minute-wise,如下所示:

    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
    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
循环,我想在plotly中为每个唯一的
videoId
绘制散点图,在X轴上有分钟,在Y轴上有活动用户数。该图将如下所示:

与自定义函数一起使用,并且-对于创建的每个第一行
NaN
值,该值被参数为
fill\u value=0的函数忽略:

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
编辑:

散点图使用:

for i, df in df.groupby('videoId'):
    ax = df.plot.scatter(x='viewedMinutes', y='active')
    ax.set_title(i, fontsize=20)

viewdminutes
totalMinutes
列是否应忽略?还是不?非常感谢你,事情终于解决了。我会在12分钟后接受你的回答。在关于绘图的问题中,我只添加了一件事,你能帮我解决吗?@debdridutta-当然,你能解释一下什么列需要绘图吗?@debdridutta-所以每个组都有一个问题需要单独绘图,比如
df.groupby('videoId')。绘图(x='vieweedminutes',y='active)
?这是熊猫绘图。你们需要为每组分别绘制图吗?嗨,我只是想告诉你们,这是我的错误,因为loop正在绘制所有的图