有兩個資料框架df['x']和df['y']。 我如何將這兩個表相乘,并將行數相加?
x0 x1 x2 y0 y1 y2
2 5 9 2 3 4
南 4 7 2 2 3
3 南 3 1 2 3
期望的輸出:
(2x2) (5x3) (9x4)=55
等等。
Nan應該被視為0.
我在使用下面的代碼時,一直遇到的結果是nan值。
有沒有其他更有效的方法來解決這個問題?
df['z'] = (df['x'] 。 to_numpy() * df['y'].to_numpy()).sum( axis=1)
uj5u.com熱心網友回復:
Pandas支持資料幀上的算術操作,并且還為它們提供了靈活的封裝器。
df.method() operator
------------------------
添加
子 -
mul *
div /
模%。
pow **
將原始資料框架與填充的nan值相乘。
#METHOD 1。
(df_x.fillna(0)*df_y. values).sum(1)
或者你可以使用pd.DataFrame.mul(),它等同于*,但提供了添加fill_value的功能。
#METHOD 2
df_x.mul(df_y.values, fill_value=0).sum(1)
0 55.0
1 29.0
212.0
dtype: float64
注意:如果
df_y也是nan值,那么將df_y.values替換為df_y.fillna(0).values。
uj5u.com熱心網友回復:
嘗試使用filter與regex引數:
df.filter(regex='xd').mul(df. filter(regex='yd').to_numpy().sum( axis=1)
或者只使用filter(like=...):
df.filter(like='x').mul(df. filter(like='y').to_numpy()).sum(axis=1)
0 55.0
1 29.0
212.0
dtype: float64
uj5u.com熱心網友回復:
試一下:
dfX = pd.DataFrame({
'x0': [2,np.nan,3] 。
'x1': [5, 4,np.nan] 。
'x2': [9,7,3]
})
dfY = pd.DataFrame({
'y0': [2,2,1] 。
'y1': [3,2,2] 。
'y2': [4,3, 3]
})
dfX = dfX.fillna(0)
dfY = dfY.fillna(0)
for i in range(len(dfX)) 。
print(np.sum(dfX.iloc[i].to_numpy()*dfY.iloc[i].to_numpy()))
輸出:
55.0。
29.0
12.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307648.html
標籤:
