Pandas组按唯一ID和每个唯一ID的不同日期分组

2024-06-26 02:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

标题可能会让人困惑:我有一个数据框,显示了一周内用户的id登录。我的目标是显示每个员工的重复数据消除ID和重复数据消除日期,以便获得用户在一周内唯一登录的天数。因此,我一直在努力执行一项规则,以确保我每天只获得每个员工的不同登录

print(tempdf)
ID      date       
10301  1/4/2021   
10301  1/4/2021   
10301  1/5/2021    
10301  1/6/2021   
10301  1/7/2021    
10301  1/8/2021    
10302  1/4/2021    
10302  1/5/2021    
10302  1/6/2021    
10302  1/7/2021    
10302  1/8/2021    

我唯一能想到的就是尝试传递某种形式的.nunique(),但这个实例会将该计数应用于我的整个数据帧,并在我消除重复之前过滤掉我的所有ID

tempdf1=tempdf.groupby(['date'], as_index = False).nunique()
tempdf1['# days signed in for week'] = tempdf1.groupby('ID')['ID'].transform('count')
df=tempdf1.drop_duplicates(['ID']).copy()

这就是我想要的结果:

print(df)
ID      date    # days signed in for week     
10301  1/4/2021    5
10302  1/4/2021    5

Tags: 数据用户inidfordate员工days
1条回答
网友
1楼 · 发布于 2024-06-26 02:16:56
  • 计算周初
  • 然后是count()的简单用法
df = pd.read_csv(io.StringIO("""ID      date    # days signed in for week     
10301  1/4/2021    6
10301  1/4/2021    6
10301  1/5/2021    6
10301  1/6/2021    6
10301  1/7/2021    6
10301  1/8/2021    6
10302  1/4/2021    5
10302  1/5/2021    5
10302  1/6/2021    5
10302  1/7/2021    5
10302  1/8/2021    5"""), sep="\s\s+", engine="python")

df.date = pd.to_datetime(df.date)
df["weekStart"] = df['date'] - pd.to_timedelta(df['date'].dt.dayofweek, unit='d')
df.groupby(["ID","weekStart"])["date"].count().reset_index()\
.rename(columns={"weekStart":"date","date":"# days signed in for week"})

相关问题 更多 >