我是 Pandas 的新手,但由于將具有恒定值的列添加到 pandas 數據框,我能夠一次添加不同的列c = {'new1': 'w', 'new2': 'y', 'new3': 'z'}df.assign(**c)但是,我試圖弄清楚當我想向數據框添加新列(當前為 120 萬行 * 23 列)時要采取的路徑是什么。讓我們稍微簡化一下 df 并嘗試使其更清晰:Order Orderline Product 1 0 Laptop 1 1 Bag 1 2 Mouse 2 0 Keyboard 3 0 Laptop 3 1 Mouse 我想添加一個新列,這取決于訂單是否至少有 1 個產品 == Bag,那么它應該是 1(對于該特定訂單的所有行),否則為 0。結果將變為:Order Orderline Product HasBag 1 0 Laptop 1 1 1 Bag 1 1 2 Mouse 1 2 0 Keyboard 0 3 0 Laptop 0 3 1 Mouse 0 我可以做的是找到所有唯一的訂單號,然后過濾掉子框架,檢查產品列的 Bag,如果找到,則在新列中添加 1,否則為 0,然后用結果替換原始子框架??赡苡懈玫姆绞絹韺崿F這一點,而且性能也更高。我嘗試這樣做的主要原因是稍后將事情弄平。每個訂單都應成為具有某些產品值的 1 行。我不再需要 Bag 的信息,但如果原始訂單曾經有 Bag (1) 或沒有 Bag (0),我想保留在我的數據框中。最終,當數據被清除后,它可以用作 scikit-learn 的基礎(或者這就是我所希望的)。
1 回答
泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
如果我理解正確,你想要GroupBy.transform.any
首先,我們通過檢查其中的哪些行帶有 來創建一個Product布爾Bag數組Series.eq。然后我們GroupBy在這個布爾數組上檢查any值是否為True. 我們transform用來保持初始數組的形狀,以便我們可以將值分配回去。
df['ind'] = df['Product'].eq('Bag').groupby(df['Order']).transform('any').astype(int)
Order Orderline Product ind
0 1 0 Laptop 1
1 1 1 Bag 1
2 1 2 Mouse 1
3 2 0 Keyboard 0
4 3 0 Laptop 0
5 3 1 Mouse 0
添加回答
舉報
0/150
提交
取消
