簡體   English   中英

Pandas 按唯一 ID 分組,每個唯一 ID 的不同日期

[英]Pandas group by unique ID and Distinct date per unique ID

標題可能令人困惑:我有一個 dataframe,它在一周內顯示 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(),但這個實例會將該計數應用於我的整個 dataframe,並在我可以對它們進行重復數據刪除之前過濾掉我的所有 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
  • 計算周開始
  • 那么這是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"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM