[英]Pandas dataframe how to add a columns based on rank in a dates vector
我有一個日期向量
L = [Timestamp('2018-07-15 00:00:00'),
Timestamp('2019-07-15 00:00:00')]
和一個帶有日期列的數據框:
df = c1 c2 Date
1. 2. 2018-07-13 16:00:00
1. 7. 2018-07-15 16:00:00
3. 7. 2018-07-15 16:50:00
4. 7. 2018-07-15 19:50:00
2. 2. 2018-07-16 16:00:00
5. 1. 2020-10-10 16:00:00
8. 4. 2018-06-13 16:00:00
5. 4. 2021-12-13 16:00:00
2. 9. 2019-01-01 16:00:00
2. 6. 2019-01-01 17:00:00
我想添加一個列,它是日期向量中的排名,並從同一日期刪除行(無論小時/分鍾)。 所以我會有:
df = c1 c2 d. new
1. 2. 2018-07-13 16:00:00 0
1. 4. 2018-06-13 16:00:00 0
2. 2. 2018-07-16 16:00:00 1
5. 1. 2020-10-10 16:00:00 2
8. 4. 2018-06-13 16:00:00 0
5. 4. 2021-12-13 16:00:00 2
2. 9. 2019-01-01 16:00:00 1
2. 6. 2019-01-01 17:00:00. 1
最好的方法是什么?
您可以將 2 個 numpy 數組與廣播進行比較,對於 count True
s 使用sum
,最后使用Series.dt.normalize
和Series.isin
過濾掉沒有時間的匹配日期,通過~
反轉掩碼:
L = [pd.Timestamp('2018-07-15 00:00:00'),pd.Timestamp('2019-07-15 00:00:00')]
df['Date'] = pd.to_datetime(df['Date'])
df['new'] = (df['Date'].to_numpy()[:, None] > pd.to_datetime(L).to_numpy()).sum(axis=1)
df1 = df[~df['Date'].dt.normalize().isin(L)]
print (df1)
c1 c2 Date new
0 1.0 2.0 2018-07-13 16:00:00 0
4 2.0 2.0 2018-07-16 16:00:00 1
5 5.0 1.0 2020-10-10 16:00:00 2
6 8.0 4.0 2018-06-13 16:00:00 0
7 5.0 4.0 2021-12-13 16:00:00 2
8 2.0 9.0 2019-01-01 16:00:00 1
9 2.0 6.0 2019-01-01 17:00:00 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.