如何将键映射到多个值到具有/多个值的数据框列?

How to map key to multiple values to dataframe column w/ multiple values?

我最终想按有多种运输要求的商品与只有 1 种运输要求的商品进行分组。

我有一个 pandas df 列,如下所示:

ID #(column name = ID)
1111
1111,2222
1111,2222
2222,4444,3333
2222,4444

我如何创建一个字典对象或映射层(对所有建议开放),如果它符合条件并更改键值,我可以在其中传递任何值?

例如,如果值为 1111, 4444,则将其更改为 Express Shipping, Standard Shipping 并使其位于同一数据帧中。

我最终想按有多种运输要求的商品与只有 1 种运输要求的商品进行分组。

1. shipping_num = (1111, 2222, 3333, 4444).

2. shipping_map = (Express shipping, Standard Shipping, 2-day shipping, 1-day shipping)



*NEW_SHIPPING MAP COLUMN*
Express shipping
Express shipping, Standard Shipping
Standard Shipping, 1-day shipping,2-day shipping
Standard Shipping, 1-day shipping

感谢观看!

您可以从 shipping_numshipping_map 创建一个映射字典,然后使用 str.split + explodeID 列中获取个人 ID 号.然后使用map获取航运图;最后使用 groupby + agg 恢复原状:

shipping_num = (1111, 2222, 3333, 4444)
shipping_map = ('Express shipping','Standard Shipping', '2-day shipping', '1-day shipping')

mapping = dict(zip(shipping_num, shipping_map))
df['shipping_map'] = df['ID'].str.split(',').explode().astype(int).map(mapping).groupby(level=0).agg(', '.join)

输出:

               ID                                       shipping_map
0            1111                                   Express shipping
1       1111,2222                Express shipping, Standard Shipping
2       1111,2222                Express shipping, Standard Shipping
3  2222,4444,3333  Standard Shipping, 1-day shipping, 2-day shipping
4       2222,4444                  Standard Shipping, 1-day shipping

我不是 100% 清楚您希望代码做什么。可能有帮助的一件事是设置像 MyDict = {1111:"Express Shipping",4444:"Standard Shipping} 这样的字典。从那里,您可以执行 df["NewColumn"] = df["ID"].apply(lambda x: MyDict[x]) 将数字转换为标签。

但您似乎对使用多个密钥感兴趣?

另一件可能有帮助的事情是暂时将您的“ID”列转换为字符串(例如 df['StrID'] = df['ID'].astype(str)),然后用逗号“拆分”该列。 (例如 df['StrID'].str.split(',') 这会让你计算每列中的 ID 数量。然后你可以 运行 一个 group-by 超过它。