を辞書値を使用して、乗算パンダは、次のデータフレームを考えると、いくつかの列にわたって
a b c d output
0 1 5 3 3 24.1
1 2 4 2 2 21.4
2 3 3 4 1 22.6
3 4 3 3 1 23.8
4 5 4 10 1 38.4
:
params = {'a': 2.5, 'b': 3.0, 'c': 1.3, 'd': 0.9}
は、次の所望の出力を生成します私はこれを使用して結果を生成しています:
df['output'] = [np.sum(params[col] * df.loc[idx, col] for col in df)
for idx in df.index]
しかし、これは非常に遅いアプローチであり、私は組み込みのパンダの機能を使ってより良い方法がなければならないと考えています。
また、私はこの考え:
# Line up the parameters
col_sort_key = list(df)
params_sorted = sorted(params.items(), key=lambda k: col_sort_key.index(k[0]))
# Repeat the parameters *n* number of times
values = [v for k, v in params_sorted]
values = np.array([values] * df.shape[0])
values
array([[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9],
[ 2.5, 3. , 1.3, 0.9]])
# Multiply and add
product = df[col_sort_key].values * values
product
array([[ 2.5, 15. , 3.9, 2.7],
[ 5. , 12. , 2.6, 1.8],
[ 7.5, 9. , 5.2, 0.9],
[ 10. , 9. , 3.9, 0.9],
[ 12.5, 12. , 13. , 0.9]])
np.sum(product, axis=1)
array([ 24.1, 21.4, 22.6, 23.8, 38.4])
しかし、それは少し複雑ですね!ネイティブなパンダで何か考えてみる?
ポイントを使用することができます。私の古いアプローチは、この新しいアプローチよりも65倍遅かった。みんな、ありがとう。 – blacksite
numpyの行列ベクトル乗算はどうですか? これは、np.matmul(df.as_matrix()、np.array(2.5,3.0,1.3、0.9))のようなものになります。 –