将名称映射到列表中包含的代码

2024-07-07 01:59:50 发布

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

我有以下格式的数据帧:

id      date       item
1 2015-02-01     [0, 2]
2 2015-08-01  [1, 5, 2]
3 2015-07-01  [1, 8, 3]
4 2015-09-01  [8, 1, 0] 

我需要将项目编号映射到以下数据框中提供的产品名称:

item  product
0      ducky
1  chocolate
2        dog
3      light
4        toy
5       rope
6       shoe
7      shirt
8      table
9         tv

最终的数据帧应如下所示:

id      date                       item
1 2015-02-01               [ducky, dog]
2 2015-08-01     [chocolate, rope, dog]
3 2015-07-01  [chocolate, table, light]
4 2015-09-01  [table, chocolate, ducky]

我尝试过用一系列的.groupby()、取消堆叠、重新堆叠、旋转等方法来实现这一点。我正在寻找一种更实用(优雅)的方法,只需几行代码即可实现。 下面是一些数据复制代码。非常感谢

orders = pd.DataFrame(
{
    'id': [1, 2, 3, 4],
    'date': pd.to_datetime(['2015-02-01','2015-08-01','2015-07-01','2015-09-01']),
    'item': [[0, 2], [1, 5, 2], [1, 8, 3], [8, 1, 0]]
}
)

items = pd.DataFrame(
{
    'item': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    'product': ['ducky','chocolate','dog','light','toy','rope','shoe','shirt','table','tv']
}
)

Tags: 数据iddatetableproductitemlightpd
1条回答
网友
1楼 · 发布于 2024-07-07 01:59:50

我会这样做,假设项目与索引一起排序(否则,您可以将索引设置为项目代码):

orders['item'] = [[items.loc[k,'product'] for k in i] for i in orders.item]

相关问题 更多 >