簡體   English   中英

根據最近和最近的日期對公共 ID 進行分組

[英]Group common ID's based on most and the least recent date

嘗試從我的數據中的兩個字段中獲取最高和最低日期,並根據 id 對它們進行分組。 我注意到我的日期字段有一個字符串,它阻止排序並限制我獲得正確的結果。

我的數據集--df

ID 登錄 登出
1 2020 年 1 月 11 日 2021 年 3 月 23 日
1 2020 年 8 月 12 日 現在
1 2018 年 1 月 10 日 現在
1 2021 年 2 月 2 日 2021 年 2 月 3 日
2 1990 年 4 月 5 日 2021 年 3 月 22 日
3 2010 年 1 月 25 日 2021 年 2 月 22 日
2 2015 年 6 月 12 日 現在
4 現在 現在

我得到了什么:

ID 登錄 登出
1 2018 年 1 月 10 日 現在
2 1990 年 4 月 5 日 現在
3 2010 年 1 月 25 日 2021 年 2 月 22 日
4 現在 現在

我如何期望 output

ID 登錄 登出
1 2018 年 1 月 10 日 2021 年 3 月 23 日
2 1990 年 4 月 5 日 2021 年 3 月 22 日
3 2010 年 1 月 25 日 2021 年 2 月 22 日
4 現在 現在
my code:
sample= {'login':'min', 'logout':'max'}
final= df.groupby(['id'], sort=True).agg(sample)

我的方法或 python 中解決此問題的更好方法有什么問題嗎? 或者除了替換df中的字符串之外,還有其他避免字符串的聰明方法嗎? (我來自 sql,所以仍然習慣於 pythonic 的東西:) 提前謝謝

那是因為就字符串比較而言, 'now' > '03/23/2021' now可以嘗試用較小的字符串替換:

tmp_now = '000000'
(df.replace('now',tmp_now)
   .groupby(['id'], sort=True).agg(sample)
   .replace(tmp_now,'now')
)

Output:

         login      logout
id                        
1   01/10/2018  03/23/2021
2   04/05/1990  03/22/2021
3   01/25/2010  02/22/2021
4          now         now

暫無
暫無

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

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