我有一份订单和物品清单。有些订单有超过1项。
Orderid, Itemid
1 123
2 122
2 234
3 334
4 111
4 998
4 110
我已将它们读入数据帧。我如何重塑数据帧,或使用python来获取我的数据:
Orderid: [itemid, itemid, ....]
Orderid: [itemid, itemid, ....]
Orderid: [itemid, itemid, ....]
Orderid: [itemid, itemid, ....]
我尝试过:创建一个其键都是空列表的dict,然后在每个键中添加相关值列表。虽然mydict.values()在运行之后仍然是空列表,但它似乎不起作用。
for order in df['Order']:
mydict[order] = []
for order in df['Order']:
if order == mydict[order]:
mydict[order].append(df['Item'])
答案 0 :(得分:2)
你可以这样做:
>>> df.groupby('Orderid').Itemid.apply(list)
Orderid
1 [123]
2 [122, 234]
3 [334]
4 [111, 998, 110]
Name: Itemid, dtype: object
请注意,使用内容为容器类型(如列表)的DataFrames有时会产生意外结果。如果可能的话,通常可以更顺畅地将数据按行分隔,并通过groupby
进行聚合来完成计算。