簡體   English   中英

熊貓數據框如何根據日期向量中的排名添加列

[英]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.normalizeSeries.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM