我試圖計算負差,并計算每個id的 "date "列之間的天數。當該列的值為 "Y "時,每個id的計數被重置。
然而,我希望計數從重置日期開始。
目前我正在這樣做,并得到以下輸出:
df = pd. DataFrame({'reset': ['N','Y','N'。 'N','N','Y','N'】。]
'date': ['2019-09-04','2020-12-06','2020-12-06', '2019-09-07','2019-11-08','2021-05-21','2021-06-23'],
'id': [16860,16860,16860。 16860,16860,16860,16860]
})
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d')
df = df.sort_values(['id','date'] )
#創建基于重置日的額外分組列。
df['group'] = df['reset'] 。 replace({'N':False,'Y':True})
df['group'] = df.groupby('id') ['group'].cumsum()
df = df.sort_values(by='date', ascending=False)
df['負差'] = df.groupby(['id','group']) ['date'] 。 diff() / np.timedelta64(1, 'D')
df['負差'] = df. groupby(['id','group'])['負差'].cums().fillna(0)
df = df.sort_values(['id','date'] )
print(df)
重置日期id組的負差異
0 N 2019-09-04 16860 0.0 -65.0
3 N 2019-09-07 16860 0.0 -62.0
4 N 2019-1108 16860 0.0 0.0
1 Y 2020-12-06 16860 1.00.0
2 N 2020-1206 16860 1.0 0.0
5 Y 2021-05-21 16860 2. 0 -33.0
6 N 2021-06-23 16860 2.
然而,我希望輸出結果是這樣的:
reset date id group negative difference
0 N 2019-09-04 16860 0.0 -459.0
3 N 2019-09-07 16860 0.0 -456.0
4 N 2019-1108 16860 0. 0 -394.0
1 Y 2020-12-06 16860 1.
2 N 2020-1206 16860 1. 0 -166.0
5 Y 2021-05-21 16860 2.
6 N 2021-06-23 16860 2.0 0.0
uj5u.com熱心網友回復:
你是在正確的道路上,只需要得到顛倒的順序得到組
。df['group'] = df['reset'] 。 replace({'N':False,'Y':True})
df['group'] = df.iloc[::-1,:].groupby('id') ['group'].cumsum()
df['負差'] = df.date.sub(df. groupby(['id','group'])['date'].transform('last') / np.timedelta64(1, 'D')
df
重置日期 id 組負差
0 N 2019-09-04 16860 2 -459.0[/span]。
3 N 2019-09-07 16860 2 -456.0[/span]。
4 N 2019-1108 16860 2 -394.0
1 Y 2020-1206 16860 2 0.0
2 N 2020-12-06 16860 1 -166.
5 Y 2021-05-21 16860 1 0.0
6 N 2021-06-23 16860 0 0.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321118.html
標籤:
