如果我有以下資料
| 名稱 | 開始 | 結尾 |
|---|---|---|
| 一個 | 3/4/12 | 14 年 7 月 9 日 |
| 乙 | 5/2/17 | 6/3/18 |
| C | 13 年 4 月 10 日 | 14 年 5 月 12 日 |
| 一個 | 4/6/13 | 7/12/15 |
| 乙 | 4/12/19 | 12/3/21 |
| C | 2013 年 12 月 6 日 | 11/3/14 |
對于每個唯一名稱(A、B、C),我想為除正在考慮結束日期的行之外的每一行選擇結束日期晚于同名的開始日期的行。所以,在這種情況下,A 和 C。基本上,首先使用 groupby (['Name'] ,然后在對同名的行進行比較時選擇結束日期晚于開始日期的行。
uj5u.com熱心網友回復:
將兩列都轉換為日期時間,因此可以比較less bySeries.lt然后GroupBy.all用于檢查是否所有Trues perName和last 過濾器索引:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399463.html
