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正在绘制所有的图