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

时间:2021-02-01 16:43:27

标签: python pandas

标题可能令人困惑:我有一个数据框,显示一周内的 user_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

1 个答案:

答案 0 :(得分:1)

  • 计算一周的开始
  • 然后是 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"})