我正在嘗試創建一個新列,其中包含 SKU 可能屬于的所有分類(Asst 1 - 50)。如果 SKU 在相應列中用“x”表示,則該 SKU 屬于分類。
該腳本需要能夠遍歷 SKU 列中的行并檢查任何 ASST 列中的“x”。如果找到一個,將該分類列的名稱復制到新創建的“所有分類”列中。
一個班輪后:
我一直在嘗試使用 df.apply 方法,但我似乎無法做到這一點。
def assortment_crunch(row):
if row == 'x':
df['Asst #1'].apply(assortment_crunch):
我的嘗試并沒有真正說明需要遍歷所有“asst”列以及如何將該列分配給新創建的列。
uj5u.com熱心網友回復:
我不確定這是否是最有效的方法,但你可以試試這個。
而不是apply
對列進行 ing,而是對apply
整個 DF 進行訪問以訪問行。然后您可以遍歷每一列并為最后一列建立值:
def make_all_assortments_cell(row):
assortments_in_row = []
for i in range(1, 51):
column_name = f'Asst #{i}'
if (row[column_name] == 'x').any():
assortments_in_row.append(row[column_name])
return ", ".join(assortments_in_row)
df["All Assortments"] = df.apply(make_all_assortments_cell)
我認為這會起作用,盡管我還沒有測驗過。
uj5u.com熱心網友回復:
這是一個超快速(“矢量化”)的單線:
asst_cols = df.filter(like='Asst #')
df['All Assortment'] = [', '.join(asst_cols.columns[mask]) for mask in asst_cols.eq('x').to_numpy()]
解釋:
df.filter(like='Asst #')
Asst #
- 回傳名稱中包含的所有列.eq('x')
- 與 完全相同== 'x'
,因為括號混亂,否則鏈接這樣的函式會更容易to_numpy()
- 將掩碼資料幀轉換為掩碼串列
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/446241.html
上一篇:遍歷兩列并計算一列中有多少值與第二列中的精確值匹配?
下一篇:jsonAPI資料到熊貓資料框