【发布时间】:2019-09-14 05:51:18
【问题描述】:
这是一个 SKU 相似性问题。我有一个这样的数据框。每个 ctn_id 有多个 sku_code。
dfr = pd.DataFrame(columns=['ctn_id','sku_code'])
dfr['ctn_id'] = np.random.randint(low=1,high=21,size=200)
dfr['sku_code'] = np.random.choice(['a','b','c','d'],size=200)
dfr.drop_duplicates(['ctn_id','sku_code'], inplace=True)
我想填充以下数据框。
dfx = pd.DataFrame(columns=['sku_code','a','b','c','d'])
dfx['sku_code'] = ['a','b','c','d']
dfx = dfx.fillna(0)
dfx.set_index('sku_code',inplace=True)
使用下面的逻辑
for idx in dfr['ctn_id'].unique():
x = list(dfr[dfr['ctn_id'] == idx]['sku_code'].unique())
for skui in dfx.index:
if skui in x:
for skuj in x:
dfx.loc[skui, skuj] = dfx.loc[skui, skuj] + 1
我有 250 万个 ctn_ids 和 400 个 sk_codes,总共有 10 亿次赋值操作。有没有更好的方法可以使用 pandas 或任何其他包来做到这一点?
【问题讨论】:
-
你的机器有多少内存?
-
16GB。不过,dfr 数据帧大约为 600MB。
-
你能提供一个示例输出吗?
-
你可以运行最后一个sn-p的代码来获取输出。
标签: python pandas parallel-processing bigdata vectorization