Python 熊猫:将项目转换为dict,其中orderID是dict键
我有一份订单和物品清单。有些订单有多个项目Python 熊猫:将项目转换为dict,其中orderID是dict键,python,pandas,Python,Pandas,我有一份订单和物品清单。有些订单有多个项目 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
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'])
您可以这样做:
>>> df.groupby('Orderid').Itemid.apply(list)
Orderid
1 [123]
2 [122, 234]
3 [334]
4 [111, 998, 110]
Name: Itemid, dtype: object
请注意,使用内容为容器类型(如列表)的数据帧有时会产生意外的结果。如果可能的话,将数据按行分隔,并通过
groupby
进行聚合来完成所需的计算,通常会更加平滑。为什么要这样做?在许多情况下,最好保持现有格式,并通过在orderid上分组来执行任何需要执行的操作。尝试应用apriori算法(频繁项集),并需要在我的dataset中按列显示项。BrenBarn-任何将每个项推到下一个空列的明显方式,而不是生成列表?@JeffreyJames:你想在“空”列中看到什么?这听起来像是在创造一个非表格结构,这对熊猫来说并不太合适。此外,如果您的组的大小差异很大(因为某些行中会有很多空元素),则效率会很低。很好的一点是@BrenBarn-在df.对数据进行csv'处理之后,一旦我丢失了列表字符[and](这很好),格式实际上是可行的。我现在将尝试运行分析。再次感谢你的帮助。所有使用vstack、unstack和melt的尝试都让我一事无成:)