걸쳐 사전 값을 사용하여 곱팬더 다음 dataframe 주어 여러 열
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])
을하지만 그 조금 뒤얽힌 보인다
는 나는이 생각! 네이티브 팬더에 대한 생각은 없습니까?
포인트를
dot
을 사용할 수 있습니다 자신의 었죠 빠른 내 실제 사용 사례. 나의 오래된 접근법은이 새로운 것보다 65 배 느렸다. 고마워, 모두들. – blacksitenumpy에서 행렬 벡터 곱셈은 어떻게됩니까? 이렇게하면 결국 np.matmul (df.as_matrix(), np.array (2.5, 3.0, 1.3, 0.9))와 같은 결과가 나타납니다. –