亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何添加新列并根據另一列的系列填充特定值?

如何添加新列并根據另一列的系列填充特定值?

手掌心 2022-10-18 16:51:19
我是 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


查看完整回答
反對 回復 2022-10-18
  • 1 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號