我有以下資料框,其中包含隨時間(月)的用戶 ID:
DATE USER_ID ACTIVITY
2021-06-01 A1 1
2021-06-01 B2 1
2021-06-01 C3 0
2021-07-01 A1 1
2021-07-01 B2 0
2021-07-01 C3 1
2021-08-01 A1 1
2021-08-01 B2 0
2021-08-01 C3 0
2021-09-01 A1 1
2021-09-01 B2 1
2021-09-01 C3 1
“ACTIVE”列的值僅顯示 1(用戶處于活動狀態)和 0(用戶未處于活動狀態)。
我想創建一個新列,每月根據以下條件跟蹤員工 ID 是否有活動:
*如果上個月 id 為 0,當前 id 為 0,則標簽為“空缺庫存”
*如果上個月 id 為 0,當前 id 為 1,則標簽為“新活動”
*如果上個月 id 為 1,當前 id 為 0,則標簽為“新空缺”
*如果上個月 id 為 1,當前 id 為 1,則標簽為“活躍庫存”
考慮到這些條件,這是帶有新列的預期資料框:
DATE USER_ID ACTIVITY NEW_COLUMN
2021-06-01 A1 1 NaN
2021-06-01 B2 1 NaN
2021-06-01 C3 0 NaN
2021-07-01 A1 1 active stock
2021-07-01 B2 0 new vacancy
2021-07-01 C3 1 new active
2021-08-01 A1 1 active stock
2021-08-01 B2 0 vacancy stock
2021-08-01 C3 0 new vacancy
2021-09-01 A1 1 active stock
2021-09-01 B2 1 new active
2021-09-01 C3 1 new active
在此先感謝您的幫助!
uj5u.com熱心網友回復:
您可以使用groupby.shift來訪問每個用戶的上一個時間段,并將狀態組合到類似二進制的編碼中:
d = {0: 'vacancy stock', 1: 'new active', 10: 'new vacancy', 11: 'active stock'}
df['NEW_COLUMN'] = (df['ACTIVITY']
.add(df.groupby('USER_ID')['ACTIVITY'].shift().mul(10))
.map(d)
)
輸出:
DATE USER_ID ACTIVITY NEW_COLUMN
0 2021-06-01 A1 1 NaN
1 2021-06-01 B2 1 NaN
2 2021-06-01 C3 0 NaN
3 2021-07-01 A1 1 active stock
4 2021-07-01 B2 0 new vacancy
5 2021-07-01 C3 1 new active
6 2021-08-01 A1 1 active stock
7 2021-08-01 B2 0 vacancy stock
8 2021-08-01 C3 0 new vacancy
9 2021-09-01 A1 1 active stock
10 2021-09-01 B2 1 new active
11 2021-09-01 C3 1 new active
注意。對于真正的二進制編碼,您將乘以 2 并使用字典:d = {0: 'vacancy stock', 1: 'new active', 2: 'new vacancy', 3: 'active stock'}。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517964.html
