निम्नलिखित 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])
लेकिन वह थोड़ा घुमावदार लगता है! एक देशी पांडा पर कोई विचार कोशिश करें?
अंक के बाद से उपयोग कर सकते हैं उसके जा रहा समाप्त हो गया मेरे वास्तविक उपयोग के मामले के लिए सबसे तेजी से। मेरा पुराना दृष्टिकोण इस नए से 65 गुना धीमा था। सबको धन्यवाद। – blacksite
numpy में मैट्रिक्स वेक्टर गुणा के बारे में क्या? यह कुछ ऐसा होगा जैसे: np.matmul (df.as_matrix(), np.array (2.5, 3.0, 1.3, 0.9)) –