我有一個函式mult將一個數字乘以 100、200、300、400 和 500,并回傳一個 1 行 5 列的資料框。mult(1):
col1 col2 col3 col4 col5
0 100 200 300 400 500
我有一個df1包含 x 列和 y 行的資料框,其中一列包含一個數字:
cola colb colc
0 asdf b 1
1 axci c 2
2 vhsk r 3
我想用來map呼叫我的函式mult并將結果添加為新列colc:df1
cola colb colc col1 col2 col3 col4 col5
0 asdf b 1 100 200 300 400 500
1 axci c 2 200 400 600 800 1000
2 vhsk r 3 300 600 900 1200 1500
我嘗試使用的代碼是:
df1[['col1','col2','col3','col4','col5']] = df1['colc'].map(mult).
當我運行代碼時,我收到一條錯誤訊息,指出Columns must be same length as key. 據我了解,當右側的列數大于我要分配的列數時,就會發生該錯誤,但我已經確認兩邊都有 5 列。
任何關于我做錯了什么或如何使映射作業的見解將不勝感激。
uj5u.com熱心網友回復:
如果您指的是回傳資料幀的通用函式,我認為這是可行的:
df1[['col1','col2','col3','col4','col5']] = pd.concat(df1['colc'].map(mult).to_list(), ignore_index=True)
uj5u.com熱心網友回復:
非常適合 numpy 陣列廣播:
df1[mult.columns] = mult.to_numpy() * df1["colc"].to_numpy()[:, None]
uj5u.com熱心網友回復:
嘗試這個:
df2.join(pd.DataFrame(df2['colc'].to_numpy()[:,None] * df1.to_numpy(),
columns=df1.columns,
index=df2.index))
輸出:
cola colb colc col1 col2 col3 col4 col5
0 asdf b 1 100 200 300 400 500
1 axci c 2 200 400 600 800 1000
2 vhsk r 3 300 600 900 1200 1500
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454538.html
