我收到了一個非常小的資料集,date每次user登錄系統時,我都必須使用該資料集創建一個表,我可以在其中顯示每次登錄的累積月度日志計數和總體日志的累積計數,這是我擁有的資料集:
| 日期 | 用戶 |
|---|---|
| 2022 年 1 月 1 日 | 標記 |
| 2022 年 2 月 1 日 | 標記 |
| 2022 年 3 月 2 日 | 標記 |
| 2022 年 4 月 2 日 | 標記 |
| 2022 年 5 月 3 日 | 標記 |
| 2022 年 6 月 3 日 | 標記 |
| 2022 年 7 月 3 日 | 標記 |
| 2022 年 8 月 3 日 | 標記 |
| 2022 年 9 月 3 日 | 標記 |
這是我想要的輸出:
| 排 | 日期 | 用戶 | 每月軌道 | acum_track |
|---|---|---|---|---|
| 1 | 2022 年 1 月 1 日 | 標記 | 1 | 1 |
| 2 | 2022 年 2 月 1 日 | 標記 | 2 | 2 |
| 3 | 2022 年 3 月 2 日 | 標記 | 1 | 3 |
| 4 | 2022 年 4 月 2 日 | 標記 | 2 | 4 |
| 5 | 2022 年 5 月 3 日 | 標記 | 1 | 5 |
| 6 | 2022 年 6 月 3 日 | 標記 | 2 | 6 |
| 7 | 2022 年 7 月 3 日 | 標記 | 3 | 7 |
| 8 | 2022 年 8 月 3 日 | 標記 | 4 | 8 |
| 9 | 2022 年 9 月 3 日 | 標記 | 5 | 9 |
為什么?讓我們看看第 5 行。這是用戶 Mark 在第 3 個月(3 月)第一次登錄系統,但它是資料集中的第 5 次整體登錄(為了學習的目的,只會有一個年(2022 年)。
我不知道如何將每月和總體計數放在一起。我可以計算用戶總共登錄了多少次,但我知道為了達到我想要的輸出,我必須先分組,groupby user然后sort根據月份進行計數,但我必須以某種方式對用戶(僅)的資料來獲得總計數,我認為我不能將資料分組兩次。datedateuser
uj5u.com熱心網友回復:
首先,您需要使用 轉換date為實際datetime值to_datetime。剩下的很簡單,groupbyand cumcount:
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
df['monthly_count'] = df.groupby([df['user'], df['date'].dt.year, df['date'].dt.month]).cumcount() 1
df['acum_count'] = df.groupby('user').cumcount() 1
輸出:
>>> df
date user monthly_count acum_count
0 2022-01-01 Mark 1 1
1 2022-01-02 Mark 2 2
2 2022-02-03 Mark 1 3
3 2022-02-04 Mark 2 4
4 2022-03-05 Mark 1 5
5 2022-03-06 Mark 2 6
6 2022-03-07 Mark 3 7
7 2022-03-08 Mark 4 8
8 2022-03-09 Mark 5 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443592.html
上一篇:資料清洗:正則運算式替換數字
