[英]How do I select rows based on comparisons of different column values across rows after applying groupby?
如果我有以下數據
姓名 | 開始 | 結尾 |
---|---|---|
一個 | 2012 年 3 月 4 日 | 2014 年 7 月 9 日 |
乙 | 17 年 5 月 2 日 | 2018 年 6 月 3 日 |
C | 2013 年 4 月 10 日 | 2014 年 5 月 12 日 |
一個 | 2013 年 4 月 6 日 | 2015 年 7 月 12 日 |
乙 | 2019 年 4 月 12 日 | 21 年 12 月 3 日 |
c | 2013 年 12 月 6 日 | 2014 年 11 月 3 日 |
對於每個唯一名稱(A、B、C),我想 select 對於除正在考慮其結束日期的行之外的每一行,其結束日期晚於相同名稱的開始日期的行。 因此,在這種情況下,A 和 C。 基本上,首先使用 groupby (['Name'] ,然后在對同名的行進行比較時選擇結束日期晚於開始日期的行。
將兩列都轉換為日期時間,因此可以通過Series.lt
比較 less ,然后使用GroupBy.all
檢查是否所有True
s per Name
和最后一個過濾器索引:
df['Start'] = pd.to_datetime(df['Start'], format='%m/%d/%y')
df['End'] = pd.to_datetime(df['End'], format='%m/%d/%y')
s = df['Start'].lt(df['End']).groupby(df['Name']).all()
out = s.index[s].tolist()
print (out)
或更改Series.gt
的掩碼並通過numpy.setdiff1d
獲得差異:
df['Start'] = pd.to_datetime(df['Start'], format='%m/%d/%y')
df['End'] = pd.to_datetime(df['End'], format='%m/%d/%y')
out = np.setdiff1d(df['Name'], df.loc[df['Start'].gt(df['End']), 'Name']).tolist()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.