困っていること
下記のような処理をおよそ1万回実行する必要があり、高速化を検討しています。
並列化も検討できるのですが、まずは素直に処理方法を見直すことで高速化できる知恵を頂きたいです。
やりたいこと
ソースコードに記載している通りITEMとその数値を保持している表形式の元データがあります。
その元データに対して、
数値を1件単位に分割したうえで横持ちのNUMPY配列にしたいです
データフレーム等を使わなければ高速化できるのか?などを試行錯誤中です。
ソースコードはそのまま実行できるように記述しています。
元データ:dict_arr
変換後のデータ:ndarr
期待する結果
print(ndarr) #[[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1] # [0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0] # [0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0]]
ソースコード
import pandas as pd import numpy as np dict_arr = {'ITEM':["A","B","C","A"],'NUM':[4,5,6,2]} df = pd.DataFrame(dict_arr) df2 = pd.DataFrame(data=None, columns=df.columns) for idx, row in df.iterrows(): for i in range(row['NUM']): df2 = df2.append(row) df2.reset_index(inplace=True) df2['COL'] = df2.index df2['ONE'] = 1 df2_piv = pd.pivot_table(df2, index=['ITEM'], columns='COL', values='ONE',fill_value=0, aggfunc=np.sum).reset_index() df2_piv.sort_values('ITEM',inplace=True) df2_piv.drop(columns=['ITEM'], axis=1, inplace=True) ndarr = df2_piv.values
回答2件
あなたの回答
tips
プレビュー