【发布时间】:2017-06-12 15:25:06
【问题描述】:
我的数据框看起来像这样:
我的目标是:
解释:
- 每个客户都下了 3 个订单
- 每个订单可以从多个类别中购买
- 期望状态:获取客户按订单顺序购买的类别的所有可能排列。第二张图片将有助于更好地理解这一点
- 处于期望状态的Category1 表示以第一顺序购买的Category,Category2 表示以第二顺序购买的Category,依此类推。
我正在使用的代码:
start_time = time.time()
df = pd.DataFrame()
for CustomerName in base_df.CustomerName.unique():
df1 = base_df[(base_df['CustomerName']== CustomerName)][['CustomerName','order_seq','Category']]
df2 = pd.DataFrame(index=pd.MultiIndex.from_product([subdf['Category'] for p, subdf in df1.groupby(['order_seq'])], names = df1.order_seq.unique())).reset_index()
df2['CustomerName'] = CustomerName
df = df.append(df2)
print("--- %s seconds ---" %(time.time() - start_time))
在我的数据集上运行大约需要 10 分钟 - 寻找更快的方法。
我现在正在研究 Pandas,但也欢迎 R 或 SQL 的指针!谢谢!
【问题讨论】:
-
这是一个排列?为什么顾客 1 只能在他的第一个订单中点餐?
-
欢迎来到 Stack Overflow!您可以先take the tour 学习How to Ask a good question 并创建一个Minimal, Complete, and Verifiable 示例。这让我们更容易为您提供帮助。
-
@PauloMiraMor - 不,它可以是任何东西。他本可以在他的第一个订单中购买衣服、家具或两者兼而有之。是的,需要为每个客户按订单顺序排列所有产品