簡體   English   中英

如何獲取每行不同列的最后一個有效索引的值

[英]How to get value of last valid index of a different column for each row

我在 pandas 中有下表。

  • view_time :用戶查看廣告的時間
  • click_time :用戶點擊廣告的時間(如果被點擊)
  • ad_id : 廣告標識符
>>> df
     view_time  click_time  username  ad_id
250  07:00      07:05       a         abc
251  07:10                  a         def
252  07:20      07:35       a         ghi
253  07:30      07:41       a         jkl
254  07:40                  a         mno
255  07:50                  a         pqr

我想添加一列,顯示每個時間點的最后點擊廣告( view_time )。 請注意, click_time可能比下一個view_time具有更大的值。

  • last_clicked_ad :截至view_time點擊的最后一個廣告
     view_time  click_time  username  ad_id    last_clicked_ad
250  07:00      07:05       a         abc 
251  07:10                  a         def      abc
252  07:20      07:35       a         ghi      abc
253  07:30      07:41       a         jkl      abc
254  07:40                  a         mno      ghi
255  07:50                  a         pqr      jkl

我嘗試過這樣的事情:

>>> i = df[['click_time']].apply(pd.Series.last_valid_index)
>>> df.loc[i, 'ad_id']
253    jkl
Name: ad_id, dtype: object

這給了我最后一行的ad_id值,其中click_time是非空值。

但是,我想對每個時間點( view_time )而不是整個表使用這個邏輯。

重現簡化示例:

>>> df = pd.DataFrame({'view_time': ['07:00','07:10','07:20','07:30','07:40','07:50'],
              'click_time': ['07:05', '', '07:35', '07:41', '', ''],
              'username': ['a','a','a','a','a','a'],
              'ad_id': ['abc', 'def','ghi','jkl','mno','pqr']
             })
>>> df.index += 250
>>> df['view_time'] = pd.to_datetime(df['view_time'])
>>> df['click_time'] = pd.to_datetime(df['click_time'])

使用merge_asof

df2 = (df[['click_time','username', 'ad_id']]
              .dropna(subset=['click_time'])
              .rename(columns={'ad_id':'last_clicked_ad', 'click_time':'new_time'}))

df = (pd.merge_asof(df, df2, left_on='view_time', right_on='new_time', by='username')
        .drop('new_time', 1))
print (df)
            view_time          click_time username ad_id last_clicked_ad
0 2019-11-08 07:00:00 2019-11-08 07:05:00        a   abc             NaN
1 2019-11-08 07:10:00                 NaT        a   def             abc
2 2019-11-08 07:20:00 2019-11-08 07:35:00        a   ghi             abc
3 2019-11-08 07:30:00 2019-11-08 07:41:00        a   jkl             abc
4 2019-11-08 07:40:00                 NaT        a   mno             ghi
5 2019-11-08 07:50:00                 NaT        a   pqr             jkl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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