将字典值映射到数据框中的列表

2024-09-30 08:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个数据框,其中有一列:

column
--------
['getNode', 'getCodec', 'PackStore', 'DownRoute']
['MessageDigest', 'getInstance', 'SecureRandom']
...

我还有一本类似这样的字典:

{
getNode: 1,
getCodec: 2, 
PackStore: 3, 
DownRoute: 4,
MessageDigest: 5, 
getInstance: 6, 
SecureRandom: 7,
...
}

我的目标是用字典中出现的值替换列中列表中的每个项。i、 e:

column
--------
[1,2,3,4]
[5,6,7]
...

我试着打电话:

df.column.map(dict)

但是我得到一个错误:unhashable type: 'list'

任何额外的帮助都会很棒!谢谢


Tags: 数据map目标df列表字典columndict
3条回答

让我们做explode

df.column.explode().map(dd).groupby(level=0).agg(list)

还有一种方法:

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映射到列表:

%timeit df.column.apply(lambda x: pd.Series(x).map(dd).tolist())

1.15 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

分解挤压贴图分组方式:

%timeit df.explode('column').squeeze().map(dd).groupby(level=0).agg(list)

2.56 ms ± 78.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

pd.具有列表理解和映射的系列构造函数:

%timeit pd.Series([list(map(dd.get, l)) for l in df['column']])

88.7 µs ± 4.58 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

列分解映射

%timeit df.column.explode().map(dd).groupby(level=0).agg(list)

1.21 ms ± 28 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

列应用lambda列表映射

%timeit df.column.apply(lambda x: list(map(dd.get, x)))

152 µs ± 4.12 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

试试apply

df.column.apply(lambda x: pd.Series(x).map(dct).tolist())

或者只是:

df.column.apply(lambda x: list(map(dct.get, x)))

相关问题 更多 >

    热门问题