如果我有一個只有活動天數的df,我可以通過pev_day添加一列
# make sure vals are sorted。
df = df.sort_values(['id', 'date'] )
# add col with prev date[/span].
df['prev_date'] = df.groupby('id') ['date'].shift()
現在我有一個不同的資料集,我不僅有 "活躍 "的日子,還有一些不活躍的日子。我怎樣才能繞過這個問題來實作這一點:
id date active prev_date
A 01-01-2021 1 NaN
A 02-01-2021 1 2001-01-2021
A 03-01-2021 0 02-01-2021 2021 2.
A 04-01-20210 02-01-2021
A 05-01-2021 102-01-2021
A 06-01-20211 05-01-2021
[..]
B 01-01-2021 1 NaN
B 02-01-2021 0 01-01-2021 [...
[..]
uj5u.com熱心網友回復:
IIUC,一種方法是使用where來掩蓋沒有活動的日期和ffill來傳播有最后活動的日期。然后像你用groupby.shift那樣。
# dummy data。
df = pd.DataFrame({
'id':['A/span>]*6 ['B']*6。
'date': pd.date_range('2021-07-01', freq='d', periods=12),
'activity': [1,1,0,0,0,1。 1,0,0,1,0, 1]
})
# 創建prev_date列。
df['prev_date'] = (
df['date'].where(df['activity'].astype(bool) #mask dates without activity[/span].
.fill() #傳播有活動的最后日期。
.groupby(df['id']).shift() #轉移每組id的日期。
)
print(df)
id date activity prev_date
0 A 2021 07-01 1 NaT
1 A 202107-02 1 202107-01
2 A 202107-03 0 202107-02
3 A 202107-04 0 202107-02
4 A 202107-05 0 202107-02
5 A 2021-07-06 1 2021-07-02
6 B 202107-07 1 NaT
7 B 2021-07-08 0 2021-07
8 B 202107-09 0 202107-07
9 B 2021-07-10 1 2021-07-07
10 B 2021-07-11 0 2021-07-10
11 B 2021-07-12 1 2021-07-10
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324011.html
標籤:
