所以我有一個帶有列的資料框:
column
--------
['getNode', 'getCodec', 'PackStore', 'DownRoute']
['MessageDigest', 'getInstance', 'SecureRandom']
...
我還有一本看起來像這樣的字典:
{
getNode: 1,
getCodec: 2,
PackStore: 3,
DownRoute: 4,
MessageDigest: 5,
getInstance: 6,
SecureRandom: 7,
...
}
我的目標是用字典中出現的值替換列內串列中的每個專案。IE:
column
--------
[1,2,3,4]
[5,6,7]
...
我試過打電話:
df.column.map(dict)
但我收到一個錯誤: unhashable type: 'list'
任何額外的幫助都會很棒!謝謝!
uj5u.com熱心網友回復:
嘗試apply:
df.column.apply(lambda x: pd.Series(x).map(dct).tolist())
要不就:
df.column.apply(lambda x: list(map(dct.get, x)))
uj5u.com熱心網友回復:
讓我們做 explode
df.column.explode().map(dd).groupby(level=0).agg(list)
uj5u.com熱心網友回復:
這是另一種方式:
df.explode('column').squeeze().map(dd).groupby(level=0).agg(list)
輸出:
0 [1, 2, 3, 4]
1 [5, 6, 7]
Name: column, dtype: object
選項 2:
pd.Series([list(map(dd.get, l)) for l in df['column']])
輸出:
0 [1, 2, 3, 4]
1 [5, 6, 7]
dtype: object
時間:
應用-lambda-map-tolist:
%timeit df.column.apply(lambda x: pd.Series(x).map(dd).tolist())
每個回圈 1.15 ms ± 39.7 μs(7 次運行的平均值 ± 標準偏差,每次 1000 次回圈)
爆炸擠壓地圖分組:
%timeit df.explode('column').squeeze().map(dd).groupby(level=0).agg(list)
每個回圈 2.56 ms ± 78.7 μs(7 次運行的平均值 ± 標準偏差,每次 100 次回圈)
具有串列理解和映射的 pd.Series 構造:
%timeit pd.Series([list(map(dd.get, l)) for l in df['column']])
每個回圈 88.7 μs ± 4.58 μs(7 次運行的平均值 ± 標準偏差,每次 10000 次回圈)
列爆炸圖
%timeit df.column.explode().map(dd).groupby(level=0).agg(list)
每個回圈 1.21 ms ± 28 μs(7 次運行的平均值 ± 標準偏差,每次 1000 次回圈)
列應用 lambda 串列映射
%timeit df.column.apply(lambda x: list(map(dd.get, x)))
每個回圈 152 μs ± 4.12 μs(7 次運行的平均值 ± 標準偏差,每次 10000 次回圈)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/310943.html
