使用此代碼:
data = pd.DataFrame({'car_plate':['1v','2f','3a','h0','m1'],
'car_brand':['Honda','Honda','Ford','Audi','Audi'],
'last_seen':['01/01/2020','01/02/2020','01/03/2020','01/04/2020','01/05/2020']})
data['last_seen'] = pd.to_datetime(data['last_seen'])
我有以下資料框:
| 車牌 | 汽車品牌 | 最后一次露面 | |
|---|---|---|---|
| 0 | 1V | 本田 | 2020-01-01 00:00:00 |
| 1 | 2樓 | 本田 | 2020-01-02 00:00:00 |
| 2 | 3a | 福特 | 2020-01-03 00:00:00 |
| 3 | h0 | 奧迪 | 2020-01-04 00:00:00 |
| 4 | 米1 | 奧迪 | 2020-01-05 00:00:00 |
我希望永遠這樣car_brand,我標記到1具有最新的行last_seen,所以輸出是:
| 車牌 | 汽車品牌 | 最后一次露面 | 最近的 | |
|---|---|---|---|---|
| 0 | 1V | 本田 | 2020-01-01 00:00:00 | 0 |
| 1 | 2樓 | 本田 | 2020-01-02 00:00:00 | 1 |
| 2 | 3a | 福特 | 2020-01-03 00:00:00 | 1 |
| 3 | h0 | 奧迪 | 2020-01-04 00:00:00 | 0 |
| 4 | 米1 | 奧迪 | 2020-01-05 00:00:00 | 1 |
因為2f是最近的本田,3a是最近的福特,m1是最近的奧迪。
我一直在考慮這個想法,偽代碼: group by car_brand, get max last_seen,獲取該行的索引,創建一列seen并將這些索引設定為 1 。
PS:我也想知道,如果我添加更多的級別到combintion,例如,它是如何作業的car_owner,我想最近car_plate car_owner每一個組合car_brand。
uj5u.com熱心網友回復:
我們可以做的
data['recent'] = data.groupby('car_brand').cumcount(ascending=False).eq(0).astype(int)
data
car_plate car_brand last_seen recent
0 1v Honda 2020-01-01 0
1 2f Honda 2020-01-02 1
2 3a Ford 2020-01-03 1
3 h0 Audi 2020-01-04 0
4 m1 Audi 2020-01-05 1
uj5u.com熱心網友回復:
data['recent'] = data.index.isin(data.groupby('car_brand')['last_seen'].idxmax()).astype(int)
要回答有關向組合添加更多級別的問題:是的,您可以。只需'car_brand'將上面的代碼更改為['your', 'columns', 'here'],例如
data['recent'] = data.index.isin(data.groupby(['car_brand', 'car_plate', 'car_owner'])['last_seen'].idxmax()).astype(int)
uj5u.com熱心網友回復:
一種選擇是創建一個臨時列,包含每組的最后一行,然后使用布爾掩碼來分配 0 和 1:
last = data.groupby('car_brand').last_seen.transform('last')
data.assign(recent = data.last_seen.eq(last).astype(int))
car_plate car_brand last_seen recent
0 1v Honda 2020-01-01 0
1 2f Honda 2020-01-02 1
2 3a Ford 2020-01-03 1
3 h0 Audi 2020-01-04 0
4 m1 Audi 2020-01-05 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362559.html
上一篇:熊貓資料框
