首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让连续3周或更长时间的用户使用熊猫?

如何让连续3周或更长时间的用户使用熊猫?
EN

Stack Overflow用户
提问于 2022-11-16 08:28:34
回答 2查看 58关注 0票数 1

我有一个这样的用户表,

代码语言:javascript
运行
AI代码解释
复制
    USERID  Week_Number  Year
0       fb          5.0  2021
1  twitter          1.0  2021
2  twitter          2.0  2021
3  twitter          3.0  2021
4  twitter          1.0  2022
5  twitter          2.0  2022
6  twitter          3.0  2022
7  twitter         15.0  2022
8  twitter          NaN   NaN
9    human         21.0  2022

我想找到在同一年连续3周登录>=的用户。每一年的周数都是独一无二的。例如,在上表中,我们可以看到用户twitter登录在2022年的week_no: 1,2,3中,从而满足了我正在寻找的条件。

我想要的输出,

代码语言:javascript
运行
AI代码解释
复制
USERID        Year
twitter       2021
twitter       2022

您可以使用

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd
import numpy as np

data = pd.DataFrame({"USERID": ["fb", "twitter", "twitter", "twitter", "twitter", "twitter", "twitter", "twitter", "twitter", "human"],
                     "Week_Number": [5, 1, 2, 3, 1, 2, 3, 15, np.nan, 21],
                     "Year": ["2021", "2021","2021","2021", "2022", "2022", "2022", "2022", np.nan, "2022"]})

有人能帮我实现这个要求的输出吗?我试过很少的东西,但无法得到适当的输出。

代码语言:javascript
运行
AI代码解释
复制
for ix, group in data.groupby([data.USERID, data.Year]):
    group = group.sort_values("Week_Number")
    group["Diff"] = (group.Week_Number - group.Week_Number.shift(1)).fillna(1)
    break

谢谢你提前提供帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-16 11:12:29

由于您对至少三个星期的运行(开始或结束)的详细信息不感兴趣,而只对用户连续使用至少三个星期的元组(user, year)感兴趣,所以非常简单:

代码语言:javascript
运行
AI代码解释
复制
def min_consecutive(w, minimum_run=3):
    dy = w.diff() != 1
    runlen = dy.groupby(dy.cumsum()).size()
    return (runlen >= minimum_run).any()

s = (
    data
    .sort_values('Week_Number')
    .groupby(['USERID', 'Year'])['Week_Number']
    .apply(min_consecutive)
)
>>> s[s]
USERID   Year
twitter  2021    True
         2022    True
Name: Week_Number, dtype: bool

解释

我们考虑每一组(user, year)。在这组中,我们观察到一个(有序的,没有重复的)周数序列。这可以是[1,2,3,12,13,18,19,20,21] (运行3,运行2,运行4)。系列dy显示了运行中存在的空白(例如,上面假设的值:[T,F,F,T,F,T,F,F,F])。我们使用它的.cumsum()使每个组连续运行,例如[1,1,1,2,2,3,3,3,3]。我们取每个组的size (例如[3,2,4]),并返回True当且仅当其中任何一个都是minimum_run长的。

增编:查找符合标准的周数

以下是一些想法,取决于您希望如何输出。

代码语言:javascript
运行
AI代码解释
复制
df = data.dropna().sort_values(['USERID', 'Year', 'Week_Number'])
df = df.assign(rungrp=(df.groupby(['USERID', 'Year'])['Week_Number'].diff() != 1).cumsum())
df = df.loc[df.groupby('rungrp')['rungrp'].transform('count') >= 3]
>>> df
    USERID  Week_Number  Year  rungrp
1  twitter          1.0  2021       3
2  twitter          2.0  2021       3
3  twitter          3.0  2021       3
4  twitter          1.0  2022       4
5  twitter          2.0  2022       4
6  twitter          3.0  2022       4

所有这几个星期都是至少3周的一部分。

分组以查找每一次运行的周、分钟和最大值:

代码语言:javascript
运行
AI代码解释
复制
>>> df.groupby(['USERID', 'Year', 'rungrp'])['Week_Number'].agg([min, max])
                     min  max
USERID  Year rungrp          
twitter 2021 3       1.0  3.0
        2022 4       1.0  3.0
票数 2
EN

Stack Overflow用户

发布于 2022-11-16 08:55:58

与循环不同,您可以创建一个列,该列将显示用户在一年中是否已连续增长,然后检查该列在一年中是否每个用户超过3:

代码语言:javascript
运行
AI代码解释
复制
data.sort_values(by=['USERID','Year','Week_Number'],ascending=True,inplace=True)

data.assign(
    grouped_increase = data.groupby([data.USERID, data.Year])["Week_Number"]
    .diff()
    .gt(0)
    .astype(int)
).groupby([data.USERID, data.Year])["grouped_increase"].sum().reset_index().query(
    "grouped_increase >= 3"
).drop(
    "grouped_increase", axis=1
)

代码语言:javascript
运行
AI代码解释
复制
    USERID  Year
3  twitter  2022

基于您的评论,使用此DF

代码语言:javascript
运行
AI代码解释
复制
     USERID  Week_Number    Year
8        fb          2.0  2021.0
9        fb          3.0  2021.0
10       fb          4.0  2021.0
0        fb          5.0  2021.0
11       fb          2.0  2022.0
12       fb          3.0  2022.0
13       fb          4.0  2022.0
14       fb          5.0  2022.0
7     human         21.0  2022.0
1   twitter          1.0  2021.0
2   twitter          1.0  2022.0
3   twitter          2.0  2022.0
4   twitter          3.0  2022.0
5   twitter         15.0  2022.0
6   twitter          NaN     NaN

运行上述代码将提供:

代码语言:javascript
运行
AI代码解释
复制
    USERID    Year
0       fb  2021.0
1       fb  2022.0
4  twitter  2022.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74464008

复制
相关文章
java:从RGBA格式的图像数据byte[]创建BufferedImage对象
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/88680596
10km
2019/05/25
1.9K0
Python面向对象编程-类和对象-对象的创建和使用
在Python中,对象是一种数据结构,它封装了数据和行为,并允许对它们进行操作。对象是根据类定义的,它们具有类定义的属性和方法。本文将介绍如何在Python中创建和使用对象。
玖叁叁
2023/04/19
1.2K0
从对象复制到对象创建:用原型模式提升你的编程水平!
所谓浅拷贝,就是对象的成员属性是引用类型时,克隆后的新对象中的成员属性引用的依旧是原对象中成员属性的内存地址。也就是说:成员属性如果是引用类型,克隆的是内存地址;这个内存地址是不变的,指向的是同一个
程序视点
2023/06/06
4220
从对象复制到对象创建:用原型模式提升你的编程水平!
iOS上架之使用appuploader创建构建版本的流程​
1、打开appuploader软件​ 2、登录苹果开发者账号​ 3、点击appuploader右上角的设置​ 4、设置苹果app上传密码​ 5、开始上传ipa的安装包​
iOS程序应用
2023/04/17
4070
iOS上架之使用appuploader创建构建版本的流程​
深度学习应用:iOS 上的图像风格迁移
图像风格迁移,用 python 就可以实现,如果想要在手机上面(不联网)查看效果怎么办呢?
iOSDevLog
2019/02/20
1.1K0
Promise对象的创建与使用
为什么要使用promise? 它指定回调函数的方式更加灵活,当new出一个promise的时候,这个任务就立刻开始执行了,后面的回调函数会在异步执行完后进行回调,在没有promise之前就不一样了:
gzq大数据
2021/06/08
1K0
java 对象的创建与使用
HotSpot 是在 JIT 之后的一款 java 虚拟机的开源实现,sun 从 JDK 1.3.1 开始使用。 它主要使用 C++ 实现的,相对于 JIT,性能有大幅提高。 HotSpot 将部分代码直接编译为本地可执行代码,从而显著提升了性能。
用户3147702
2022/06/27
8880
java 对象的创建与使用
iOS-使用GCD单例创建管理对象
一·单例缓存全局变量 + (instancetype)E { static E *e; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //开启一个单例 e = [[e alloc] init]; }); return e; } 二·准备工作 在头文件暴露你所需要的属性or方法 @property (nonatomic,strong) NSString *hacker;
Wilbur-L
2021/09/02
5970
.net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。
文章主要介绍了如何通过GDI+绘制椭圆,并给出了具体的实现代码和示例。主要步骤包括:定义一个基于GDI+的Bitmap对象,使用GraphicsPath绘制椭圆,将GraphicsPath转换为Bitmap,并使用RenderOptions.SetBitmapScalingMode进行缩放处理。
用户1138785
2018/01/03
5.7K1
.net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。
面向对象编程是否走向了消亡?
【CSDN 编者按】作为一种程序设计思想,OOP 在最初诞生之际就收到了广大开发者的喜爱。但是在技术革新日益实践过程中,不少人发现面向对象的设计会使代码复杂化,难以理解而且难以测试,对此,后来有网友更是将 OOP 称之为是反模块化、反并行的,从而开启了一波又一波的吐槽模式。而论 OOP 在各个领域中的应用时,其是否真的有想象中那么糟糕?接下来,本文将带领大家一读 OOP 的兴衰成长史。
Python猫
2019/08/30
7270
面向对象编程是否走向了消亡?
9种日常JavaScript编程中经常使用的对象创建模式
今天这篇文章主要是跟大家分享9种日常JavaScript编程中经常使用的对象创建模式,利用各种技巧可以极大地避免了错误或者可以编写出非常精简的代码。希望对你有所帮助。
前端达人
2021/04/01
6470
【iOS 开发】同步快速判断视频是否可以播放
拿到一个视频的 url 地址(无论是远程还是本地),有时候在播放之前需要检测该视频是否可以播放(本地可能是文件损坏,远端地址情况更复杂),下面介绍两种适用不同情况的方法来实现。
KyXu
2019/04/11
2.2K0
Kotlin | 从线程到协程,你是否还存在 [同步] 上的使用疑问
在2022的今天,对于一个 Android 开发同学,如果你使用 Kotlin 作为主要开发语言,那么协程是必不可缺的 异步框架 。不过对于初学者来说,有时候依然存在一些理解问题或者使用上的不解。毕竟我们用了那么多年的回调与线程,突然转变思想,的确需要过程。
Petterp
2022/03/01
1.4K0
Kotlin | 从线程到协程,你是否还存在 [同步] 上的使用疑问
Javascript创建对象的学习和使用
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>javascript对象的学习</title> 5 </head>
别先生
2017/12/29
1.6K0
Javascript创建对象的学习和使用
对象的创建
new —> 到常量池中检查是否存在一个类的符号引用 —> 如果有,检查这个符号引用代表的类是否已被加载、解析、初始化 —> 没有,则执行类加载过程。
潇洒
2019/07/03
8740
ovirt 上创建vm模板的创建与使用
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/79977816
shaonbean
2019/05/26
2K0
Python面向对象编程(上)
有几种不同的编程范式,面向对象编程(OOP)是Python语言中最流行的编程范式之一。
fanjy
2022/11/16
3980
Python面向对象编程(上)
非分区表是否可以创建分区索引?
有同事问一个问题, 一张非分区表,是否可以创建分区索引? 答案是可以,但分区索引的类型有限制。 MOS这篇文章给出了答案,以及一些例子,What Is The Global Partitioned I
bisal
2019/01/29
1.7K0
三十、是否可以使用 count(*)
一、是否可以使用 count(*) 在 SQL 中,COUNT() 函数返回匹配指定条件的函数。 序号COUNT用法作用描述1COUNT(*)返回总记录数,包含 NULL 值2COUNT(1)与COUNT(*)的作用一样3COUNT(column_name)返回指定列的数目,NULL值不统计4COUNT(DISTINCT column_name)返回指定列不同值的数目,NULL值不统计 Tip: COUNT(*) 与 COUNT(column_name) 的作用不一样,如果列值包含 NULL ,统计结果就
喵叔
2022/05/06
4980
java深拷贝的实现方式_接口可以创建对象吗
Cloneable接口与Serializable接口都是定义接口而没有任何的方法。Cloneable可以实现对象的克隆复制,Serializable主要是对象序列化的接口定义。很多时候我们涉及到对象的复制,我们不可能都去使用setter去实现,这样编写代码的效率太低。JDK提供的Cloneable接口正是为了解决对象复制的问题而存在。Cloneable结合Serializable接口可以实现JVM对象的深度复制。
全栈程序员站长
2022/11/04
1.5K0

相似问题

以编程方式创建ARReferenceImage

20

iOS 11.3.1上PWA中的getUserMedia()

13

是否可以通过编程方式使用iOS在用户的主屏幕上创建快捷图标按钮

27

是否可以通过编程方式创建EMF对象?

10

是否可以通过编程方式通过.xls创建iOS文件?

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档